Вопрос:
У меня есть хост, порт, идентификатор пользователя и пароль, но отсутствует SID для подключения к СУБД Oracle. Как найти список SID на этом сервере?
Лучший ответ:
Лучше всего, если у вас есть доступ к хост-машине, а установка Oracle – использовать команду: lsnrctl status. Это работает как на компьютерах Unix, Linux, так и на Windows. Команда status покажет вам всех слушателей (и связанные с ними SID).
C:>lsnrctl status LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 — Production on 15-JUN-2009 16:16:34 Copyright (c) 1991, 2005, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE))) STATUS of the LISTENER ———————— Alias LISTENER Version TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 — Production Start Date 13-JUN-2009 12:04:14 Uptime 2 days 4 hr. 12 min. 19 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Default Service XE Listener Parameter File C:oracleXEapporacleproduct10.2.0servernetworkadminlistener.ora Listener Log File C:oracleXEapporacleproduct10.2.0servernetworkloglistener.log Listening Endpoints Summary… (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.pipeEXTPROC_FOR_XEipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ThinkpadT61)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8080))(Presentation=HTTP)(Session=RAW)) Services Summary… Service «CLRExtProc» has 1 instance(s). Instance «CLRExtProc», status UNKNOWN, has 1 handler(s) for this service… Service «PLSExtProc» has 1 instance(s). Instance «PLSExtProc», status UNKNOWN, has 1 handler(s) for this service… Service «XEXDB» has 1 instance(s). Instance «xe», status READY, has 1 handler(s) for this service… Service «XE_XPT» has 1 instance(s). Instance «xe», status READY, has 1 handler(s) for this service… Service «xe» has 1 instance(s). Instance «xe», status READY, has 1 handler(s) for this service… The command completed successfully
В приведенном выше примере вы можете подключиться к базе данных XE с помощью Conect Strings XEXDB, XE_XPT или XE.
Ответ №1
Короткий ответ: вам нужен доступ к операционной системе:
Для Unix ps -ef | grep pmon ps -ef | grep pmon покажет вам один или несколько процессов с именами, такими как ora_pmon_xxxx, а xxxx – это имя экземпляра.
В Windows, я думаю, есть похожая подпись в списке задач.
На практике эта информация обычно предоставляется вам тем, кто администрирует базу данных при создании вашей учетной записи.
Ответ №2
Вопрос сводится к тому, что ORACLE_SID или сервисы поддерживаются слушателем, который выполняется на хост-порту X. В зависимости от того, насколько безопасен этот прослушиватель, вы можете увидеть это с помощью команды lsnrctl от клиента, на котором установлен lsnrctl, Для этого вам понадобится установка сервера oracle на этом клиенте. Когда у вас есть это, вы можете выпустить
lsnrctl set current_listener (description=(address=(host=X)(port=Y)(protocol=tcp))) status
Значение по умолчанию для заполнения 10-го слушателя вызывает следующий результат:
TNS-01189: слушатель не смог аутентифицировать пользователя
Это связано с тем, что из 10g оракула по умолчанию
Безопасность включена: аутентификация локальной ОС
что только пользователь локальной ОС, который начал слушатель, может выдать команды lsnrctl слушателю. Слушатель отказывается отвечать любому другому пользователю.
Ответ №3
Другим вариантом для рассмотрения является файл /etc/oratab в Unix или его equivilent в Windows, который, я думаю, является кустом реестра.
В oratab должен быть указан список всех идентификаторов безопасности на хосте, независимо от того, запущен ли он в настоящий момент.
Ответ №4
Существует nmap script, который может помочь, oracle-sid-brute:
http://nmap.org/nsedoc/scripts/oracle-sid-brute.html
Он был установлен с nmap в моей системе.
nmap —script oracle-sid-brute -p 1521-1560 [host]
Это поможет только в том случае, если SID можно сопоставить в списке. Список по умолчанию: