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