ORA-12505, TNS: Der Listener kennt die im Verbindungsdeskriptor angegebene SID derzeit nicht


153

Ich habe Oracle 11g Express Edition Release 2 in meinem Windows 7 64-Bit-Betriebssystem installiert und versucht, das JDBC-Programm auszuführen. Dann wurde folgende Fehlermeldung angezeigt:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
    at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
    ... 8 more

1
Das manuelle Starten von OracleServiceXE über Dienste hat bei mir funktioniert.
Sen

Antworten:


182

Ich habe dieses Problem behoben, indem ich meine JDBC-Zeichenfolge korrigiert habe.

Zum Beispiel sollte die richtige JDBC-Zeichenfolge ...

jdbc:oracle:thin:@myserver:1521/XE

Aber der JDBS-String, den ich verwendet habe, ist ...

jdbc:oracle:thin:@myserver:1521:XE

(Hinweis: zwischen 1521und XEsollte a sein /)

Diese fehlerhafte JDBC-Zeichenfolge gibt mir auch einen ORA-12505-Fehler.


53
Wenn Sie einen / verwenden, handelt es sich um einen Netzdienstnamen. Wenn Sie einen Doppelpunkt verwenden, handelt es sich um eine SID.
eckes

89

Es gibt einige Dinge, die dieses Problem verursachen können. Bevor Sie jedoch mit JDBC beginnen, müssen Sie sicherstellen, dass Sie mit SQL * Plus eine Verbindung zur Datenbank herstellen können. Wenn Sie mit SQL * Plus nicht vertraut sind, handelt es sich um ein Befehlszeilentool für die Verbindung mit Oracle-Datenbanken, das seit langem ein Standardbestandteil von Oracle ist und in Oracle XE enthalten ist.

Wenn Sie mit JDBC eine Verbindung zu einer Oracle-Datenbank herstellen, stellen Sie keine direkte Verbindung zur Datenbank her. Stattdessen stellen Sie eine Verbindung zu einem TNS-Listener her, der Sie dann mit der Datenbank verbindet. Der Fehler ORA-12505bedeutet, dass der Listener aktiv war und Sie eine Verbindung herstellen konnten, Sie jedoch keine Verbindung zur Datenbank herstellen konnten, da er nicht weiß, dass diese Datenbank aktiv ist. Dafür gibt es zwei Gründe:

  • Die Datenbank wurde nicht gestartet.
  • Die Datenbank hat sich nicht beim Listener registriert, z. B. weil die Datenbank vor dem Listener gestartet wurde. (Wenn die Datenbank gestartet wird, registriert sie sich bei einem Listener, wenn sie bereits ausgeführt wird. Wenn der Listener nicht ausgeführt wird, registriert sich die Datenbank nicht selbst, und wenn der Listener gestartet wird, sucht er nicht nach Datenbanken, die dies möglicherweise tun registriere dich damit.)

ORA-12505 bedeutet, dass der Listener über diese Datenbank Bescheid weiß, der Listener jedoch keine Benachrichtigung von der Datenbank erhalten hat, dass die Datenbank aktiv ist. (Wenn Sie versuchen, mit der falschen SID eine Verbindung zur falschen Datenbank herzustellen, wird der ORA-12154-Fehler "TNS: Die angegebene Verbindungskennung konnte nicht aufgelöst werden" angezeigt.)

Welche Oracle-Services werden im Services-Snap-In ausgeführt? (Öffnen Sie diese über Systemsteuerung> Verwaltung> Dienste oder starten services.mscSie einfach> Ausführen> .) Sie müssen die Dienste OracleServiceXE und OracleXETNSListener ausführen.

Wenn beide Dienste gestartet wurden, können Sie an einer Eingabeaufforderung eine der folgenden Verbindungen zur Datenbank in SQL * Plus herstellen? (Ich gehe davon aus, dass Sie diese auf dem Computer ausführen, auf dem Sie Oracle XE installiert haben.)

sqlplus system / system-password @XE
sqlplus system / system-password
sqlplus / as sysdba

(Ersetzen Sie system-passworddas Kennwort, das Sie während der Oracle XE-Installation für die Benutzer SYS und SYSTEM festgelegt haben.)

Die erste dieser drei Verbindungen wird über den TNS-Listener hergestellt, die zweiten beiden stellen jedoch eine direkte Verbindung zur Datenbank her, ohne über den Listener zu gehen, und funktionieren nur, wenn Sie sich auf demselben Computer wie die Datenbank befinden. Wenn die erste fehlschlägt, die anderen beiden jedoch erfolgreich sind, schlagen auch JDBC-Verbindungen fehl. Wenn ja, stellen Sie mit einer der beiden anderen eine Verbindung zur Datenbank her und führen Sie sie aus ALTER SYSTEM REGISTER. Beenden Sie dann SQL * Plus und versuchen Sie das erste Formular erneut.

Wenn der dritte fehlschlägt, der zweite jedoch funktioniert, fügen Sie Ihr Benutzerkonto der Gruppe ora_dba hinzu. Führen Sie dies unter Systemsteuerung> Computerverwaltung> Lokale Benutzer und Gruppen aus.

Sobald Sie Verbindungen des Formulars erhalten können

sqlplus system / system-password @XE

Damit dies funktioniert, sollten Sie über JDBC eine Verbindung zu Oracle XE herstellen können. (Übrigens haben Sie uns den JDBC-Code, mit dem Sie eine Verbindung zur Datenbank herstellen, nicht angezeigt, aber ich würde vermuten, dass er sehr wahrscheinlich korrekt ist. Wenn Teile der Verbindungszeichenfolge falsch wären, würden verschiedene andere Fehler auftreten.)


3
@Raj: Ich sehe nicht, was Ihre Bearbeitung zur Antwort bringt, also habe ich sie gelöscht. Wenn Sie einen erheblichen Beitrag zu einer Frage leisten möchten, geben Sie bitte Ihre eigene Antwort an, anstatt die einer anderen Person zu bearbeiten.
Luke Woodward

@ LukeWoodward Ich erhalte diesen Fehler SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. auf allen 3
vaibhavcool20

1
@qtpseleniumSupport: Diese Nachricht besagt, dass Sie sich in SQL * Plus befanden und die Zeile eingegeben haben system/ora...(oder SQL * Plus hat diese Zeile aus einer Datei gelesen, die Sie gelesen haben sollen). Die Befehlszeilen, die ich oben angegeben habe, sollen über ein Eingabeaufforderungs- / Shell- / Terminal-Fenster verwendet werden. Wenn Sie bereits SQL * Plus ausführen, ersetzen Sie sqlplusdurch connect.
Luke Woodward

"Die Datenbank hat sich nicht beim Listener registriert, z. B. weil die Datenbank vor dem Listener gestartet wurde." - das war es, danke!
Ursache

47

Ich habe auch den gleichen Fehler bekommen, aber als ich es versuchte, scheiterten alle drei. Wenn die oben genannten drei fehlschlagen. Versuchen Sie den LSNRCTL-Status, wenn Sie feststellen, dass der Dienst (in meinem Fall XE) fehlt

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

Jetzt können Sie den Service sehen.
Auch wenn Sie diesen nicht sehen, probieren Sie ihn aus

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

Das sollte wohl funktionieren ...


2
Du hast es geschafft, Mann! Nach dem Einstellen von local_listenerwird der orcl-Listener nun in angezeigt lsnrctl. Tausend Dank!
Asgs

Dadurch funktionierte mein System, aber ich habe Folgendes ausgeführt: ALTER SYSTEM set local-listener = XE;
Daniel Williams

wenn ich tippe: 'alter system set local_listener =' (ADRESSE = (PROTOKOLL = TCP) (HOST = localhost) (PORT = 1521)) 'scope = both;' Es wird ein Fehler zurückgegeben: ORA-65040: operation not allowed from within a pluggable databaseWas bedeutet das? JDBC kann nicht konfiguriert werden: /
Alg_D

1
Beide Antworten mit den höchsten Stimmen haben geholfen, aber diese hat mehr geholfen. Es sieht so aus, als hätte ich nicht 127.0.0.1 als Listener-Adresse (ich hatte eine mit dem lokalen Namen meines PCs). Also, indem ich dieses neue hinzufügte, fing es an zu arbeiten
Johnbr

alter system set local_listener = ... arbeitete für mich.
Ben Asmussen

31

Wenn Sie diesen Fehler erhalten "ORA-12505, TNS: Listener kennt derzeit die im Verbindungsdeskriptor angegebene SID nicht"

Lösung: Öffnen Sie die Dienste und starten Sie OracleServiceXEdanach, um eine Verbindung herzustellen ...


Ich hatte das gleiche Problem, aber beim Ausführen von OracleServiceXE. Daher funktionierte der Neustart eines OracleServiceXE-Dienstes für mich. Weiß nicht warum?!
Hamedz

Beachten Sie bei der Suche nach OracleServiceXE, dass XE der Datenbank-SID entspricht. Stellen Sie daher sicher, dass Sie nach dem richtigen Dienst suchen, OracleService [SID]
Sandoval0992,

10

Ich habe einige Gründe für diese Ausnahme gefunden

1) Der Name der Datenbank XE ist standardmäßig. Die URL lautet also " jdbc: oracle: thin: @localhost: 1521: XE ".

2) Stellen Sie sicher, dass OracleServiceXE, OracleXETNSListener ausgeführt wird. Es befindet sich unter Systemsteuerung \ Alle Elemente der Systemsteuerung \ Verwaltung \ Dienste


8

Ich habe dieses Problem durch Korrigieren meines JDBC-Codes gelöst.

Die richtige JDBC-Zeichenfolge sollte ...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");

Aber die JDBC-Zeichenfolge, die ich verwendete, war ...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");

Der Fehler, orcl anstelle von xe anzugeben, zeigte diesen Fehler, da der SID-Name falsch war.


In meinem Fall hat conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");funktioniert.
Pran Kumar Sarkar

8

Mein Problem ist behoben, wenn ich den folgenden Code verwende:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");

7

Angesichts eines ähnlichen Fehlers hat keine der oben genannten Lösungen geholfen. In der Datei listner.ora ist ein Problem aufgetreten. Aus Versehen hatte ich SIDaus dem SID_LISTunten stehenden hinzugefügt (Abschnitt zwischen den Sternen *).

 SID_LIST_LISTENER =
      (SID_LIST =

        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        )

 *(SID_DESC =
           (SID_NAME = XE)
           (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
         )*
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
      )


    DEFAULT_SERVICE_LISTENER = (XE)

Dieser Fehler wurde wie folgt behoben:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
       (SID_NAME = XE)
       (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
     )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )


DEFAULT_SERVICE_LISTENER = (XE)

Gestoppt und die Datenbank Geben Sie hier die Bildbeschreibung ein

Die Listener OracleServiceXE und OracleXETNSListener wurden manuell gestoppt, da sie nicht automatisch gestoppt wurden, indem Sie zu Systemsteuerung \ Alle Elemente der Systemsteuerung \ Verwaltung \ Dienste wechseln. Die Datenbank wurde neu gestartet und es funktionierte wie ein Zauber.


4

Ich kam anfangs mit dem gleichen Problem hierher. Ich hatte Oracle 12c unter Windows 8 (64-Bit) installiert, aber seitdem habe ich es durch 'TNSPING xe' in der Befehlszeile behoben ... Wenn die Verbindung nicht hergestellt oder der Name nicht gefunden wurde, versuchen Sie es mit dem Datenbanknamen. In meinem Fall war es wieder 'orcl' ... 'TNSPING orcl' und wenn es erfolgreich pingt, müssen Sie in diesem Fall die SID in 'orcl' ändern (oder welchen Datenbanknamen Sie auch immer verwenden) ...


4

Eine Möglichkeit, die ich nicht ausführlich diskutiert habe, besteht darin, dass möglicherweise ein Problem beim Auflösen des Hostnamens auf dem Hostcomputer selbst auftritt. Wenn in / etc / hosts kein Eintrag für $ (Hostname) vorhanden ist, ist der Oracle-Listener verwirrt und wird nicht angezeigt.

Das stellte sich als mein Problem heraus, und das Hinzufügen des Hostnamens und der IP-Adresse in / etc / hosts löste das Problem.



3

Wenn Sie in Oracle SQL Developer eine funktionierende Verbindung haben, verwenden Sie die Informationen im Verbindungsmenü, um Ihre URL zu erstellen, wie in der folgenden Abbildung beschrieben:

Geben Sie hier die Bildbeschreibung ein

Im obigen Beispiel wäre die URL: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

Beachten Sie, dass bei Verwendung einer SID nach dem Hostnamen ein Doppelpunkt (":") anstelle eines Schrägstrichs ("/") steht.


2

Auch ich stand vor dem gleichen Problem. Ich hatte Oracle Express Edition 10g unter Windows XP unter Verwendung von VMware installiert und es funktionierte einwandfrei. Da es sehr umständlich war, SQL-Abfragen in das von 10g bereitgestellte SQL-Dienstprogramm einzugeben, und ich es gewohnt war, mit SQL-Entwicklern zu arbeiten, habe ich 32-Bit-SQL-Entwickler in XP installiert und versucht, eine Verbindung zu meiner DB SID "XE" herzustellen. Die Verbindung mit dem Fehler-ORA-12505 TNS-Listener ist jedoch derzeit nicht bekannt. Die im Verbindungsdeskriptor angegebene SID ist derzeit nicht bekannt. Ich war auf See, wie dieses Problem auftrat, da es mit dem SQL-Dienstprogramm einwandfrei funktionierte, und ich hatte auch einige Informatica-Zuordnungen mit demselben erstellt. Ich habe viel darüber nachgesehen und die mir angebotenen Vorschläge angewendet, nachdem ich den Status "lsnrctl" in öffentlichen Foren gepingt hatte, aber ohne Erfolg. Heute Morgen habe ich jedoch erneut versucht, eine neue Verbindung herzustellen. und Voila, es funktionierte ohne Probleme. Ich vermute, nachdem ich in einigen Posts gelesen habe, dass der Hörer manchmal zuhört, bevor die DB eine Verbindung herstellt, oder so (entschuldigen Sie meine grobe Referenz, da ich hier ein Neuling bin), aber ich schlage vor, den Computer einfach neu zu starten und erneut zu überprüfen.


2

Ich hatte das gleiche Problem. Um dieses Problem zu beheben, habe ich zuerst meinen Listener neu konfiguriert, netcadanach habe ich meine alte Datenbank, die ORCL war, mit verwendet dbcaund dann die neue Datenbank erneut mit erstelltdbca


2

Ich habe das gleiche Problem festgestellt und durch einen Neustart des OracleServiceXE-Dienstes gelöst. Gehen Sie zu Services.msc und überprüfen Sie, ob der OracleServiceXE-Dienst aktiv ist


2

Ich habe dieses Problem behoben, indem ich " SID " in meiner Datei TNSNAMES.ora in " SERVICE_NAME " geändert habe.

Überprüfen Sie, ob Ihre Datenbank nach SID oder SERVICE_NAME fragt.

Prost


2

Wenn Sie Oracle Express Edition verwenden, sollten Sie diese URL haben

jdbc: oracle: thin: @localhost: 1521: xe oder jdbc: oracle: thin: @localhost: 1521 / XE

Ich hatte ein ähnliches Problem mit dem Liquibase-Konfigurations-Plugin in pom.xml. Und ich habe meine Konfiguration geändert:

`<configuration>
   <driver>oracle.jdbc.OracleDriver</driver>
   <url>jdbc:oracle:thin:@localhost:1521:xe</url>
   <defaultSchemaName></defaultSchemaName>
   <username>****</username>
   <password>****</password>
</configuration>`

2

Verbindung con = DriverManager.getConnection ("jdbc: oracle: thin: @localhost: 1521: xe", "scott", "tiger");

Fehler, den ich bekam:

java.sql.SQLException: Listener hat die Verbindung mit folgendem Fehler abgelehnt: ORA-12505, TNS: Listener kennt derzeit die im Verbindungsdeskriptor angegebene SID nicht. Der vom Client verwendete Verbindungsdeskriptor war: localhost: 1521: xe

Wie ich es gelöst habe:

Verbindung con = DriverManager.getConnection ("jdbc: oracle: thin: localhost: 1521: xe", "scott", "tiger");

(Entfernen @)

Ich weiß nicht warum, aber es funktioniert jetzt ...


1

Überprüfen Sie dies, indem Sie tnsping und den Instanznamen auf dem Hostcomputer ausführen. Es gibt Ihnen die tns-Beschreibung und die meiste Zeit ist der Hostname unterschiedlich, was nicht übereinstimmt.

Ich löse mein Problem ebenfalls

In Unix-Maschine $ tnsping (Enter)

Es gibt mir eine vollständige Beschreibung, wo ich festgestellt habe, dass der Hostname anders ist .. :)


1

Bitte überprüfen Sie beide OracleServiceXEund lassen Sie OracleXETNSListenerden Status starten, wenn Sie durch navigierenstart->run->services.msc .

Denn mein Fall wurde nur OracleXETNSListenergestartet, aber OracleServiceXEnicht gestartet, als ich bei anfing right clicking -> startund die Verbindung überprüfte, ob sie für mich funktioniert


1

Ich hatte ein ähnliches Problem in SQL Workbench.

URL:

jdbc: oracle: thin: @ 111.111.111.111: 1111: xe

funktioniert nicht

URL:

jdbc: oracle: thin: @ 111.111.111.111: 1111: asdb

funktioniert.

Dies hilft mir in meiner konkreten Situation. Ich fürchte, das könnte viele andere Gründe mit unterschiedlichen Lösungen geben.


0

Hatte ein ähnliches Problem. Das Problem trat plötzlich auf - wir haben eine URL für die Datenbankverbindung mit Lastenausgleich, aber bei JDBC-Verbindungen habe ich direkt auf eine einzelne Datenbank verwiesen.

Geändert, um eine ausgeglichene Datenbank-URL zu laden, und es hat funktioniert.


2
Wir empfehlen die Verwendung der URL der vollständig qualifizierten Verbindungszeichenfolge wie gezeigt: jdbc: oracle: thin: @ (DESCRIPTION = (ADRESSE = (HOST = myhost) (PORT = 1521) (PROTOKOLL = tcp)) (CONNECT_DATA = (SERVICE_NAME = myorcldbservicename)
Nirmala

0

In meinem Fall hat es nicht geklappt, schließlich habe ich mein Orakel und meinen TNS-Listener neu gestartet und alles hat funktioniert. Ich hatte 2 Tage lang Probleme.


0

Ich habe diesen Fehler erhalten ORA-12505, TNS: Der Listener kennt derzeit die im Verbindungsdeskriptor angegebene SID nicht, als ich versuchte, mit SQL Developer eine Verbindung zu Oracle DB herzustellen.

Die verwendete JDBC-Zeichenfolge war jdbc: oracle: thin: @myserver: 1521 / XE. Offensichtlich waren der richtige und die beiden obligatorischen Oracle-Dienste OracleServiceXE, OracleXETNSListener aktiv .

So habe ich dieses Problem gelöst (in Windows 10)

 1. Open run command.
 2. Type services.msc 
 3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
 4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.

0

Abgesehen davon, dass Dienste (OracleServiceXE, OracleXETNSListener) ausgeführt werden, besteht die Möglichkeit, dass Ihre Antivirensoftware / Firewall diese weiterhin blockiert. Stellen Sie einfach sicher, dass sie nicht blockiert sind.Geben Sie hier die Bildbeschreibung ein



0

Mein Orakel funktionierte nicht mehr und ich bekam diesen Fehler. Ich habe meine Maschine neu gestartet und auch die oben genannten Lösungen ausprobiert. Letztendlich habe ich Komponentendienste geöffnet und die Oracle-Dienste neu gestartet, und alles hat funktioniert. Hoffe das hilft jemandem.


0

Ich habe den Datenbanklink nur falsch erstellt.

Eine einfache Lösung für mich war, einfach 'SID' in SERVICE_NAME zu ändern

CREATE DATABASE LINK my_db_link
CONNECT TO myUser IDENTIFIED BY myPassword
USING
'
(
    DESCRIPTION=
    (
        ADDRESS=
        (PROTOCOL=TCP)
        (HOST=host-name-heren)
        (PORT=1521)
    )
    (CONNECT_DATA=(SID=theNameOfTheDatabase))
)';

Ändern

SID=theNameOfTheDatabase

zu

SERVICE_NAME=theNameOfTheDatabase 

mein Problem behoben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.