2009-10-23 13 views
13

Al conectarse a Oracle, el controlador JDBC se identifica a sí mismo como "Thin Client JDBC" a Oracle (en v $ session como el 'programa'). También hay una columna 'ClientInfo' en v $ session que podría usarse para esto, pero siempre está vacía.Cambiar el identificador de cliente ligero Oracle JDBC

Tenemos la necesidad de identificar diferentes aplicaciones conectadas a Oracle (que se ejecutan en el mismo host, por lo que la columna 'máquina' en v $ session es la misma), por lo que es posible cambiar la forma en que Oracle JDBC El controlador Thin Client se identifica a sí mismo (por lo que podríamos poner el nombre de la aplicación, por ejemplo).

¿O hay una manera recomendada de hacerlo? Una restricción es que estamos haciendo esto dentro de Struts para algunas de las aplicaciones, que se encarga de la configuración de la conexión internamente.

+1

posible duplicado de [¿Cómo identifico mi aplicación Java con Oracle en la conexión?] (Http://stackoverflow.com/questions/1548400/how-do-i-make-my-java-application-identify -self-to-orracle-on-connection) – derobert

Respuesta

18

[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 

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 
+0

Saludos, eso debería ayudar para algunas de las aplicaciones. ¿Funciona esto con OracleConnectionPoolDataSource? Veo que hay un método setConnectionProperties allí. ¿Tengo que especificar todos los campos enumerados, incluso si estoy usando los métodos .setUser(), .setPassword(), etc. en OracleConnectionPoolDataSource? – JeeBee

+1

Sé que funciona en OracleConnectionPoolDataSource. Hace mucho tiempo, así que no recuerdo los detalles. setConnectionProperties toma un java.util.Properties como argumento. No crea que esto vacía el usuario y la contraseña configurados anteriormente con .setUser(), .setPassword(). ¿Tengo sentido? ;-) –

+0

¡Hola! Sí, eso tiene sentido, y funciona solo con el conjunto v $ session.program. Aclamaciones. – JeeBee

2

También hay una función de Oracle:

dbms_application_info.set_client_info('Client Info'); 

que establece la columna de la ClientInfo en v $ session.

Cuestiones relacionadas