Как я могу заставить свое Java-приложение идентифицировать себя с Oracle при подключении? - PullRequest
7 голосов
/ 10 октября 2009

Когда мое приложение подключается к базе данных Oracle, я хочу видеть, просматривая активные сеансы в базе данных, к которой оно подключено. В настоящее время он идентифицирует себя как «Тонкий клиент JDBC», потому что это драйвер, который я использую, но другие приложения на основе Java, которые у меня есть, могут каким-то образом установить это значение в нечто более значимое, например «SQL Developer». Я думал, что это свойство Connection или OracleDataSource, но мне так и не удалось найти то, что подходит. Это возможно? В случае, если это имеет значение, я использую Java 1.5 с Oracle 10g и тонкий драйвер 10g.

Ответы [ 4 ]

15 голосов
/ 10 октября 2009
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

На уровне приложения можно использовать следующие методы для установки client_info , module и action в v $ session :

dbms_application_info.set_client_info
dbms_application_info.set_module
dbms_application_info.set_action
2 голосов
/ 23 октября 2009

Есть также функция Oracle:

dbms_application_info.set_client_info('Client Info');

, который устанавливает столбец ClientInfo в v $ session.

Это может быть полезно, если у вас есть доступ только к Соединению, а не к базовому DataSource или DriverManager.

2 голосов
/ 10 октября 2009

Вам необходимо определить свойство соединения v$session.program в вашем источнике данных таким образом, чтобы это свойство было добавлено к каждому соединению. Как вы это сделаете, зависит от вашей реализации источника данных. Значение, для которого вы устанавливаете свойство, появится в активной таблице сеансов oracle.

1 голос
/ 06 ноября 2017

Начиная с oracle jdbc 12.1, вы можете установить некоторые значения информации о клиенте через jdbc api, т.е. вы можете сделать

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

для свойств OCSID ...

ACTION, CLIENTID, ECID, MODULE, SEQUENCE_NUMBER и DBOP

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

Настройка PROGRAM не работает таким образом, вы можете сделать это, как описано в принятом ответе или несколько проще, установив системное свойство "oracle.jdbc.v $ session.program".

...