Как получить список SID на машине в Java-приложении

Я пытаюсь найти список SID на хосте. У меня есть хост, порт, имя пользователя и пароль для Oracle, и я хочу узнать SID на машине.

Я могу войти в систему и использовать «статус lsnrctl», чтобы вернуть SID, однако, когда я пытаюсь запустить это через свое Java-приложение, это не удается. Это связано с версией Oracle:

Начиная с 10g oracle по умолчанию включает безопасность: аутентификация локальной ОС, что означает, что только локальный пользователь ОС, запустивший прослушиватель, может выполнять команды lsnrctl для прослушивателя. Слушатель откажется отвечать любому другому пользователю.


person Mark McK    schedule 25.04.2017    source источник
comment
Я не знаю, как это сделать. Создание сеанса JDBC в моем приложении Java сейчас и просмотр, что я могу получить от этого - любые предложения помогут!   -  person Mark McK    schedule 25.04.2017
comment
Мои извинения афише и Дж. Чомелю. Конечно, вы ищете ORACLE_SID. Вы можете найти их в $ORATAB, который обычно можно найти в /etc/oratab или /var/opt/oracle/oratab. Извините - полное замораживание мозгов с моей стороны.   -  person sandman    schedule 25.04.2017


Ответы (3)


Если пользователь, который запускает приложение, не может делать то, что вы хотите, вы должны

  • немного cron job экспортирует результат lsnrctl status в файл время от времени
  • прочитайте этот файл из вашего Java-приложения

Другим решением было бы разрешить пользователю java Unix выполнять эту команду, например. с sudo -u oracle lsnrctl status; это требует небольшого исследования того, как работает su, или некоторых манипуляций со стороны вашего системного администратора.

person J. Chomel    schedule 25.04.2017

Извините за путаницу между ORACLE_SID и идентификатором сеанса (SID).

ORACLE_SID находится в $ORATAB, который обычно находится в /etc/oratab или /var/opt/oracle/oratab.

person sandman    schedule 25.04.2017
comment
Вы не путаете идентификаторы сеансов с ORACLE_SID? - person J. Chomel; 25.04.2017
comment
Кажется, он хочет SID оракула? Если ему нужен идентификатор процесса, то он также есть в этом скрипте. Не знаете, какой еще есть идентификатор сеанса? - person sandman; 25.04.2017
comment
Идентификаторы системы Oracle на сервере — это список баз данных, работающих на этом сервере; это что-то отличное от текущего идентификатора процессов базы данных, который вы получите из этого запроса. - person J. Chomel; 25.04.2017

Я нашел способ сделать это. Вы можете дать слушателю пароль, который позволяет слушателю общаться с пользователями, прошедшими проверку подлинности с помощью локальной аутентификации ОС или с помощью пароля — мое Java-приложение может использовать пароль для аутентификации, передав пароль как часть STATUS connect_data.

Источник: http://www.dba-oracle.com/t_listener_password_security_lsnrctl.htm

person Mark McK    schedule 26.04.2017