2009-10-10 16 views
7

Cuando mi aplicación se conecta a una base de datos Oracle, quiero poder ver las sesiones activas en la base de datos a la que está conectada. Actualmente se identifica como "Thin Client JDBC" porque ese es el controlador que estoy usando, pero otras aplicaciones basadas en Java que tengo de alguna manera pueden establecer este valor en algo más significativo, como "SQL Developer". Pensé que era una propiedad de Connection o OracleDataSource, pero no he logrado encontrar una que funcione. es posible? En caso de que importe, estoy usando Java 1.5, con Oracle 10g y el controlador delgado de 10g.¿Cómo hago para que mi aplicación Java se identifique a Oracle en la conexión?

+0

¿Espera distinguir entre aplicaciones cuando se ven sesiones activas? –

Respuesta

13
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 

a nivel de aplicación puede utilizar los siguientes métodos para establecer client_info, módulo y acción en v $ session:

dbms_application_info.set_client_info 
dbms_application_info.set_module 
dbms_application_info.set_action 
2

Debe definir la propiedad de conexión v$session.program en su fuente de datos, de tal forma que esa propiedad se agregará a cada conexión. Cómo lo hace depende de la implementación de su fuente de datos. El valor que establezca la propiedad aparecerá en la tabla de sesión activa de Oracle.

2

Hay un También es una función de Oracle:

dbms_application_info.set_client_info('Client Info'); 

que establece la columna ClientInfo en v $ session.

Esto podría ser útil si solo tiene acceso a Connection en lugar de DataSource o DriverManager.

0

Desde JDBC de Oracle 12.1 se puede establecer algunos valores del cliente-info a través de API JDBC, es decir, puede hacer

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

de propiedades OCSID ...

ACCIÓN, ClientId, ECID, MÓDULO, sequence_number y DBOP

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

programa de establecimiento no funciona de esta manera, se puede hacer eso como se describe en la respuesta aceptada o algo más fácil configurando la propiedad del sistema "oracle.jdbc.v $ session.program".

Cuestiones relacionadas