更改Oracle JDBC瘦客户端标识符

时间:2009-10-23 10:48:00

标签: oracle jdbc

连接到Oracle时,JDBC驱动程序将自己标识为Oracle的“JDBC瘦客户端”(在v $ session中称为“程序”)。 v $ session中还有一个'ClientInfo'列可能用于此目的,但它始终为空。

我们需要识别连接到Oracle的不同应用程序(它们在同一主机上运行,​​因此v $ session中的'machine'列完全相同),因此可以更改Oracle JDBC Thin的方式客户端驱动程序标识自己(例如,我们可以将应用程序名称放在其中)?

或者有推荐的方法吗?一个限制是我们在Struts中为一些应用程序执行此操作,这些应用程序在内部处理连接设置。

2 个答案:

答案 0 :(得分:20)

[Identical to this answer]

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

在应用程序级别,您可以使用以下方法在 v $ session client_info 模块操作 >:

dbms_application_info.set_client_info
dbms_application_info.set_module
dbms_application_info.set_action

答案 1 :(得分:3)

还有一个Oracle功能:

dbms_application_info.set_client_info('Client Info'); 

在v $ session中设置ClientInfo列。