2009-10-10 9 views
7

Quando la mia applicazione si collega ad un database Oracle, voglio essere in grado di vedere guardando le sessioni attive nel database a cui è connesso. Attualmente si identifica come "JDBC Thin Client" perché questo è il driver che sto usando, ma altre applicazioni basate su Java che ho sono in qualche modo in grado di impostare questo valore su qualcosa di più significativo, come "SQL Developer". Ho pensato che fosse una proprietà dello Connection o dello OracleDataSource, ma non sono riuscito a trovarne uno che faccia il trucco. È possibile? Nel caso abbia importanza, sto usando Java 1.5, con Oracle 10g e il driver sottile da 10g.Come faccio a rendere la mia applicazione Java identificarsi con Oracle sulla connessione?

+0

Si spera di distinguere tra le applicazioni quando si visualizzano le sessioni attive? –

risposta

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

dbms_application_info.set_client_info 
dbms_application_info.set_module 
dbms_application_info.set_action 
2

È necessario definire la proprietà di connessione v$session.program nell'origine dati, in modo tale che tale proprietà venga aggiunta a ciascuna connessione. Il modo in cui lo fai dipende dall'implementazione dell'origine dati. Il valore impostato per la proprietà verrà visualizzato nella tabella di sessione attiva di Oracle.

2

C'è un lso una funzione Oracle:

dbms_application_info.set_client_info('Client Info'); 

che imposta la colonna ClientInfo in v $ session.

Questo potrebbe essere utile se si ha accesso solo alla Connessione piuttosto che al DataSource o DriverManager sottostante.

0

Dal JDBC Oracle 12.1 è possibile impostare alcuni valori client-Info tramite JDBC, cioè si può fare

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

oggetti OCSID ...

AZIONE, clientid, ECID, MODULO, sequence_number e DBOP

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

impostazione del programma non funziona in questo modo, è possibile farlo come descritto nella risposta accettata o un po 'più semplice impostando la proprietà System "oracle.jdbc.v $ session.program".

Problemi correlati