Was ist ein TNS:listener im Kontext von Oracle?
Borderline ServerFault Frage, aber dachte, ich würde versuchen Sie hier zuerst, da ich ' ve hatte Glück mit Oracle-Fragen in der Vergangenheit.
Ich versuche eine Verbindung zu einer oracle-Datenbank von PHP und ich bekomme die folgende Fehlermeldung.
ORA-12505: TNS:listener does not currently know of SID given in connect descriptor
Dies ist der Fehler, dass die PHP-Berichte, und der Fehler zeigt sich in der Oracle-listener.log.
Mein unmittelbares problem ist die Festsetzung dieser Fehler. Die größere Frage würde ich gerne beantwortet, wie die Oracle-Verbindung-Modell arbeiten?
Dies ist eine Entwicklungsumgebung, die läuft auf meinem lokalen windows-Maschine und gearbeitet hat, bis jetzt. Leider war die Umgebung an mich übergeben (ich habe nicht es einzurichten) und die Menschen, die hat es einrichten nicht verfügbar sind, um mir zu helfen zu Debuggen.
Wenn ich war immer eine ähnliche Fehlermeldung mit MySQL oder PostgreSQL (zwei Systeme, die ich bin mehr vertraut mit), würde ich überprüfen, um sicherzustellen, dass ein Datenbank-Prozess ausgeführt wurde, und dann versuchen, eine Verbindung manuell in die Datenbank mit Benutzername/Kennwort/connection-string. Leider, ich bin nicht vertraut mit den Oracle-tools auf windows (als SQL Developer) und ich weiß nicht, was eine TNS:listener oder SID werden im Kontext von Oracle (ich habe vage Ideen, aber vagen Ideen nur selten helfen, wenn Sie Debuggen, sowas in der Art)
Allgemeine Beratung würde geschätzt werden.
Updates pro Kommentare:
Da gibt es einige Einträge in meine tnsnames.ora-Datei, wird der entsprechende Eintrag wird
OBS2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = steel-ae39650)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = OBS2)
)
)
Dies spiegelt sich nicht in der Liste der Fälle, wenn ich laufen
LSNRCTL> services
So, ich denke, meine nächste Frage ist, wie kann ich es Versuch manuell zu starten, bis die OBS2 Instanz?
- Eine TNS-Eintrag ist Teil der connection-string zu Oracle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen TNS-Namen ist wie ein alias, um Ihre service-Instanz. Der TNS-listener-Dienst fungiert als eine Art lookup-service für Sie in dieser Hinsicht. Schlägt es fehl mit dieser Fehlermeldung angezeigt, wenn der eigentliche Dienst, den Sie eine Verbindung herstellen möchten, über eine TNS-name ist nicht gültig.
Können Sie dann testen, um zu sehen, wenn der TNS-listener sieht der service korrekt mit dem Kommandozeilen-tool:
Sollte die Ausgabe etwa wie folgt:
Können Sie bitte die jeweiligen TNS-Eintrag (in der
tnsnames.ora
- Datei)? Es befindet sich in ORAHOME\client oder db\ADMIN\NETZWERK. Wenn Sie sowohl client und server, stellen Sie sicher, dass beide Kopien dertnsnames.ora
- Datei die richtigen Werte, nur um sicher zu sein.Hier ist ein Beispiel für eine ordnungsgemäße TNS-name definition in
tnsnames.ora
namens "mydb':Wollte nur hinzufügen das ich vor kurzem hatte ein ähnliches Problem, die fuhr mich verrückt, bis ich herausfand, was passiert war.
Ersten, die keywords SID und SERVICE_NAME sind nicht genau das gleiche. Dies war meine erste falsche Annahme. In vielen Umgebungen können Sie interchange SID und SERVICE_NAME, aber nicht immer, es hängt davon ab.
Sagte, Ihre Fehler verschenkt das problem: du hast die Angabe SID in einem connection string statt der SERVICE_NAME, dass tnsnames erfolgreich verwendet.
So, wenn Sie unter Angabe der Verbindungszeichenfolge im code, versuchen Sie es mit SERVICE_NAME Schlüsselwort in der Verbindungszeichenfolge (*oder, wenn Sie bereits mit SERVICE_NAME und keine Verbindung herstellen können, versuchen Sie es mit SID Schlüsselwort*).
Allzu simple Antwort, die ich kenne, aber einfach zu versuchen und zu retten, dass jemand etwas Kopfschmerzen.
Hoffe, das hilft.
Mike Atlas' Antwort ist ziemlich umfangreich, aber beachten Sie, dass Sie können eine Verbindung zu 10g (oder höher) DBs, die nicht über eine veröffentlichte tnsname mit [//]host_name[:port][/service_name]
HTH
C.