Изменение идентификатора тонкого клиента Oracle JDBC

При подключении к Oracle драйвер JDBC идентифицирует себя как "тонкий клиент JDBC" для Oracle (в v $session как "программа" ). Существует также столбец "ClientInfo" в v $session, который может быть использован для этого, но он всегда пуст.

Нам нужно идентифицировать разные приложения, подключающиеся к Oracle (которые работают на одном хосте, поэтому столбец "machine" в v $session все равно), так что можно изменить, как Oracle JDBC Thin Клиентский драйвер идентифицирует себя (чтобы мы могли, например, поставить имя приложения)?

Или есть рекомендуемый способ сделать это? Одно из ограничений заключается в том, что мы делаем это в Struts для некоторых приложений, которые обрабатывают внутреннюю настройку соединения.

Ответы

Ответ 1

[Идентично для этого ответа]

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, модуля и действия в v $session:

dbms_application_info.set_client_info
dbms_application_info.set_module
dbms_application_info.set_action

Ответ 2

Существует также функция Oracle:

dbms_application_info.set_client_info('Client Info'); 

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