2009-10-23 14 views
13

Durante la connessione a Oracle, il driver JDBC si identifica come "JDBC Thin Client" su Oracle (in v $ session come 'programma'). C'è anche una colonna "ClientInfo" nella sessione v $ che potrebbe essere usata per questo, ma è sempre vuota.Modifica Identificatore JDBC Thin Client Oracle

Abbiamo bisogno di identificare diverse applicazioni che si connettono a Oracle (che sono in esecuzione sullo stesso host, quindi la colonna 'macchina' in v $ session è sempre la stessa), quindi è possibile cambiare il modo in cui Oracle JDBC Il driver Thin Client si identifica (quindi potremmo inserire il nome dell'applicazione, ad esempio)?

Oppure esiste un metodo consigliato per farlo? Una restrizione è che lo stiamo facendo all'interno di Struts per alcune applicazioni, che sta gestendo internamente la configurazione della connessione.

+1

possibile duplicato di [Come posso fare in modo che la mia applicazione Java si identifichi con Oracle sulla connessione?] (Http://stackoverflow.com/questions/1548400/how-do-i-make-my-java-application-identify -itself-to-oracle-on-connection) – derobert

risposta

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 livello di applicazione è possibile utilizzare i seguenti metodi per impostare client_info, modulo e azione in v $ session:

012.
dbms_application_info.set_client_info 
dbms_application_info.set_module 
dbms_application_info.set_action 
+0

Cheers, che dovrebbe aiutare per alcune delle applicazioni - funziona con OracleConnectionPoolDataSource? Vedo che c'è un metodo setConnectionProperties lì. Devo specificare tutti i campi elencati, anche se sto usando i metodi .setUser(), .setPassword(), etc, su OracleConnectionPoolDataSource? – JeeBee

+1

So che funziona su OracleConnectionPoolDataSource. È passato molto tempo, quindi non ricordo le specifiche. setConnectionProperties prende un argomento java.util.Properties. Non pensare che questo svuota l'utente e la password impostati in precedenza con .setUser(), .setPassword(). Ho senso? ;-) –

+0

Ciao! Sì, ha senso, e funziona solo con il set v $ session.program. Saluti. – JeeBee

2

C'è anche una funzione di Oracle:

dbms_application_info.set_client_info('Client Info'); 

che definisce la colonna ClientInfo in v $ session.

Problemi correlati