如何让我的Java应用程序识别本身到Oracle上连接?(How do I make my Java

2019-07-21 22:10发布

当我的应用程序连接到Oracle数据库我希望能够通过查看它是否连接到数据库的活动会话看到。 目前,它自身标识为“JDBC瘦客户端”,因为这是我使用的驱动程序,但其他基于Java的应用程序,我有在某种程度上能够将该值设置为更有意义的事情,像“SQL开发”。 我认为这是对的属性ConnectionOracleDataSource ,但我没有设法找到一个做的伎俩。 这可能吗? 如果它的事项,我使用的Java 1.5,与Oracle 10g和10g的Thin驱动程序。

Answer 1:

java.util.Properties props = new java.util.Properties();
props.setProperty("password","mypassword");
props.setProperty("user","myusername");
props.put("v$session.osuser", System.getProperty("user.name").toString());
props.put("v$session.machine", InetAddress.getLocalHost().getCanonicalHostName());
props.put("v$session.program", "My Program Name");
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
Connection conn=
    DriverManager.getConnection("jdbc:oracle:thin:@myhostname:1521:mysid", props);

SQL>select username,osuser,program,machine
from v$session
where username = 'ROB'; 

USERNAME  OSUSER       PROGRAM             MACHINE
--------- -----------  ------------------  -----------
ROB       rmerkw       My Program Name     machine

在应用层面,你可以使用下面的方法来设置CLIENT_INFO, 模块行动V $ SESSION:

dbms_application_info.set_client_info
dbms_application_info.set_module
dbms_application_info.set_action


Answer 2:

您需要定义连接属性v$session.program在您的数据源,以这样一种方式,该属性将被添加到每个连接。 如何做到这一点取决于你的数据源实现。 您设置该属性值将出现在甲骨文的活动会话表。



Answer 3:

还有一个Oracle函数:

dbms_application_info.set_client_info('Client Info');

它设置在V $ SESSION的ClientInfo客户端柱。

如果你只需要访问连接,而不是底层数据源或DriverManager的,这可能是有用的。



Answer 4:

由于Oracle JDBC 12.1您可以通过JDBC API设置一些客户信息值,即你可以做

connection.setClientInfo("OCSID.CLIENTID", "MyClientId");

房产OCSID ...

ACTION,客户端ID,ECID,模块SEQUENCE_NUMBER和DBOP

见https://docs.oracle.com/database/121/JJDBC/jdbcvers.htm#JJDBC29006

设置程序不以这种方式工作,你可以做,作为公认的答案或描述通过设置系统属性“oracle.jdbc.v $ session.program”比较容易。



文章来源: How do I make my Java application identify itself to Oracle on connection?