Ich habe den Host, den Port, die Benutzer-ID und das Kennwort, aber die fehlende SID für die Verbindung mit Oracle DBMS. Wie kann ich die Liste der SIDs auf diesem Server finden?So erhalten Sie die Liste der SIDs von Oracle
Antwort
Ein besserer Weg ist, wenn Sie Zugriff auf den Host-Rechner haben und die Oracle-Installation den folgenden Befehl verwenden soll: lsnrctl status
. Dies funktioniert auf Unix-, Linux- und Windows-Rechnern. Der Befehl status zeigt Ihnen alle Listener (und ihre zugehörigen SIDs).
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:\oracle\XE\app\oracle\product\10.2.0\server\network\admin\listener.ora
Listener Log File C:\oracle\XE\app\oracle\product\10.2.0\server\network\log\listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_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
Im obigen Beispiel können Sie auf der XE-Datenbank mit dem Verbin Strings XEXDB, XE_XPT oder XE verbinden.
Die kurze Antwort ist, dass Sie Zugriff auf das Host-Betriebssystem benötigen:
Für Unix, ps -ef | grep pmon Sie einen oder mehrere Prozesse mit Namen wie ora_pmon_xxxx zeigen, und xxxx ist der Instanzname.
In Windows Ich denke, es gibt eine ähnliche Signatur in der Aufgabenliste.
In der Praxis werden Ihnen diese Informationen normalerweise vom Benutzer mitgeteilt, der die Datenbank verwaltet, wenn Ihr Verbindungskonto erstellt wird.
Die Frage kommt auf: Welche ORACLE_SIDs oder Dienste werden vom Listener unterstützt, der auf Host X Port Y läuft. Abhängig davon, wie sicher dieser Listener konfiguriert ist, können Sie dies mit dem Befehl lsnrctl von einem Client mit lsnrctl sehen Eingerichtet. Dazu benötigen Sie eine Oracle Server-Installation auf diesem Client. Wenn Sie, dass Sie
lsnrctl
set current_listener (description=(address=(host=X)(port=Y)(protocol=tcp)))
status
Die Standardeinstellung des 10g Zuhörers füllt Ursache folgenden Ergebnis ausgeben können: TNS-01189: Der Zuhörer nicht dem Benutzer
authentifizieren könnte Dies liegt daran, von 10g Oracle Standard hat Sicherheit ON: Lokale OS-Authentifizierung bedeutet, dass nur der lokale OS-Benutzer, der den Listener gestartet hat, lsnrctl-Befehle an den Listener ausgeben kann. Der Zuhörer wird sich weigern, einen anderen Benutzer zu beantworten.
Eine andere Option ist die Datei/etc/oratab auf Unix oder deren Äquivalenz unter Windows, die ich für eine Registrierungsstruktur halte.
Das oratab sollte alle SIDs auf einem Host auflisten, egal ob aktuell oder nicht.
Kommentar von @saritonin, der nicht die Berechtigung zum Kommentieren hat: "Bitte beachten Sie, dass/etc/oratab möglicherweise nicht hilfreich ist, wenn $ ORACLE_SID Parameter ist der Platzhalter '*' ". –
Es ist ein nmap-Skript, das vielleicht könnte, Orakel-sid-Brute helfen:
http://nmap.org/nsedoc/scripts/oracle-sid-brute.html
Es mit nmap auf meinem System installiert wurde.
nmap --script oracle-sid-brute -p 1521-1560 [host]
Dies würde nur helfen, wenn die SID in einer Liste gefunden werden kann. Die Standardliste ist hier:
Ich hatte diesen Ansatz für meine Antwort berücksichtigt, aber technisch funktioniert das nur, wenn für den Standard-Listener. Der mehr verworrene Ansatz zur Verwendung von lsnrctl ist, zuerst eine Liste von Listenern über ps-ef | grep lsnr zu erhalten und dann den STATUS-Befehl für jeden der Listener auszugeben. Wollte die Antwort nicht übermäßig komplizieren, da wahrscheinlich 99% der Installationen die standardmäßige Listener-Konfiguration verwenden. – dpbradley