2009-10-23 12 views
13

Podczas łączenia się z Oracle sterownik JDBC określa się jako "cienki klient JDBC" w Oracle (w sesji v $ jako "program"). Istnieje również kolumna "ClientInfo" w sesji v $, która może być do tego użyta, ale zawsze jest pusta.Zmiana identyfikatora cienkiego klienta Oracle JDBC

Mamy potrzebę identyfikacji różnych aplikacji łączących się z Oracle (które działają na tym samym hoście, więc kolumna "maszyna" w sesji v $ jest taka sama), więc można zmienić sposób Oracle JDBC Cienki sterownik klienta identyfikuje się (na przykład możemy umieścić nazwę aplikacji)?

Czy istnieje zalecany sposób, aby to zrobić? Jednym z ograniczeń jest to, że robimy to za pomocą Struts dla niektórych aplikacji, które wewnętrznie zajmują się konfiguracją połączenia.

+1

możliwy duplikat [W jaki sposób mogę sprawić, aby moja aplikacja Java identyfikowała się z firmą Oracle przy połączeniu?] (Http://stackoverflow.com/questions/1548400/how-do-i-make-my-java-application-identify -to-to-na-oracle-na-połączeniu) – derobert

Odpowiedz

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 

Na poziomie aplikacji, można użyć jednej z następujących metod, aby ustawić client_info, modułu i działania w v $ sesji:

dbms_application_info.set_client_info 
dbms_application_info.set_module 
dbms_application_info.set_action 
+0

Pozdrawiam, to powinno pomóc niektórym aplikacjom - czy to działa z OracleConnectionPoolDataSource? Widzę tam metodę setConnectionProperties. Czy muszę podać wszystkie wymienione pola, nawet jeśli używam metod .setUser(), .setPassword() itp. W OracleConnectionPoolDataSource? – JeeBee

+1

Wiem, że działa na OracleConnectionPoolDataSource. To dawno temu, więc nie pamiętam szczegółów. Metoda setConnectionProperties przyjmuje argument java.util.Properties jako argument. Nie myśl, że to opróżni użytkownika i hasło ustawione wcześniej z .setUser(), .setPassword(). Czy mam sens? ;-) –

+0

Cześć! Tak, to ma sens i działa tylko z zestawem v $ session.program. Twoje zdrowie. – JeeBee

2

Istnieje również funkcja Oracle:

dbms_application_info.set_client_info('Client Info'); 

który ustawia kolumnę ClientInfo w V $ SESSION.

Powiązane problemy