it-swarm.com.de

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

Ich habe Oracle 11g Express Edition Release 2 in meinem Windows 7 64-Bit-Betriebssystem installiert und versucht, das JDBC-Programm auszuführen. Dann habe ich den folgenden Fehler erhalten:

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
131
Learner

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

Zum Beispiel sollte die richtige JDBC-Zeichenfolge sein ...

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

Aber die JDBS-Zeichenfolge, die ich verwendet habe, ist ...

jdbc:Oracle:thin:@myserver:1521:XE

(Hinweis: zwischen 1521 und XE sollte ein / stehen.)

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

157
Wade H

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

Wenn Sie über 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-12505 bedeutet, dass der Listener aktiv war und Sie eine Verbindung dazu 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 ist nicht beim Listener registriert, z. 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 und wenn der Listener gestartet wird, sucht sie möglicherweise nicht nach Datenbanken melde dich an.)

ORA-12505 bedeutet, dass der Listener über diese Datenbank informiert ist, 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: Konnte die angegebene Verbindungs-ID nicht auflösen" angezeigt.)

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

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

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

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

Die erste dieser drei Verbindungen wird über den TNS-Listener hergestellt, die zweite Verbindung wird jedoch ohne Verwendung des Listeners direkt mit der Datenbank verbunden und funktioniert 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. Stellen Sie in diesem Fall mit einem der beiden anderen Verfahren eine Verbindung zur Datenbank her und führen Sie ALTER SYSTEM REGISTER aus. 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 zur Gruppe ora_dba hinzu. Tun Sie dies in der Systemsteuerung> Computerverwaltung> Lokale Benutzer und Gruppen.

Sobald Sie Verbindungen des Formulars erhalten können

sqlplus system /system-Passwort@XE

um zu funktionieren, sollten Sie in der Lage sein, über JDBC eine Verbindung zu Oracle XE herzustellen. (Übrigens, Sie haben uns den JDBC-Code, mit dem Sie eine Verbindung zur Datenbank herstellen, nicht gezeigt, aber ich würde vermuten, dass er wahrscheinlich korrekt ist. Es würde verschiedene andere Fehler geben, wenn Teile der Verbindungszeichenfolge falsch wären.)

83
Luke Woodward

Ich habe auch den gleichen Fehler bekommen, aber als ich es versuchte, scheiterten alle drei. Wenn die obigen drei fehlschlagen, versuchen Sie den LSNRCTL-Status, wenn Sie feststellen, dass der Dienst (in meinem Fall XE) fehlt. Versuchen Sie es mit diesem sqlplus /nolog conn system ... password ... connected. alter system register;
exit
lsnrctl stat
...

Jetzt können Sie den Dienst sehen
Auch wenn Sie es nicht sehen, probieren Sie es aus
sqlplus /nolog
conn system
... password ... connected.
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(PORT=1521))' scope = both;
... system altered ...
alter system register;
exit
lsnrctl stat

Das sollte wohl klappen ...

38
Raj

Wenn der Fehler "ORA-12505, TNS: Listener kennt die im Verbindungsdeskriptor angegebene SID derzeit nicht" angezeigt wird

Lösung: Öffnen Sie die Dienste und starten Sie OracleServiceXE. Versuchen Sie anschließend, eine Verbindung herzustellen.

28

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

1) Der Name der Datenbank XE lautet 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 in Systemsteuerung\Alle Systemsteuerungselemente\Verwaltung\Dienste

10
rajeesh

Ich habe dieses Problem behoben, indem ich meinen JDBC-Code korrigiert habe.

die richtige JDBC-Zeichenfolge sollte sein ...

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

Aber die JDBC-Zeichenfolge, die ich verwendet habe, 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.

8
javabeginner

Bei einem ähnlichen Fehler hat keine der oben genannten Lösungen geholfen. In der Datei listner.ora ist ein Problem aufgetreten. Ich hatte versehentlich SID aus dem SID_LIST 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)

Korrigierte diesen Fehler wie folgt:

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)

Angehalten und die Datenbank enter image description here

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

7
Nirmal Mangal

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
Rasheed Puttur

Eine Möglichkeit, über die ich nicht viel gesprochen habe, besteht darin, dass möglicherweise ein Problem beim Auflösen des Hostnamens auf dem Host-Computer selbst vorliegt. 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.

4
BillT

ich kam hier zunächst mit dem gleichen Problem. Ich hatte Oracle 12c auf Windows 8 (64-Bit) installiert, habe es aber seitdem durch 'TNSPING xe' in der Befehlszeile aufgelöst ... Wenn die Verbindung nicht hergestellt oder der Name nicht gefunden wurde, versuchen Sie den 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
Jose Rego

Oracle: Syntax für Thin-Style-Dienstnamen

Thin-Service-Namen werden nur vom JDBC-Thin-Treiber unterstützt. Die Syntax lautet:

@ // Hostname: Portnummer/Servicename

http://docs.Oracle.com/cd/B28359_01/Java.111/b31224/urls.htm#BEIDHCBA

4
jeton

Ich hatte das gleiche Problem, um dieses Problem zu beheben. Ich habe meinen Listener zuerst mit netca neu konfiguriert. Danach habe ich meine alte ORCL-Datenbank mit dbca gelöscht und dann die neue Datenbank erneut mit dbca erstellt.

2
The Technokrat

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 der Datei 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
Pavlo Chechehov

Auch ich stand vor dem gleichen Problem. Ich hatte Oracle Express Edition 10g unter Windows XP mit VMware installiert und es funktionierte einwandfrei. Da es sehr umständlich war, SQL-Abfragen in das von 10g bereitgestellte SQL-Dienstprogramm einzugeben, und ich an die Arbeit mit SQL Developer gewöhnt war, habe ich 32-Bit-SQL-Entwickler in XP installiert und versucht, eine Verbindung zu meiner DB SID "XE" herzustellen. . Die Verbindung ist jedoch fehlgeschlagen. Beim TNS-Listener error-ORA-12505 ist die im Verbindungsdeskriptor angegebene SID derzeit nicht bekannt. Ich war auf See, wie dieses Problem auftrat, da es mit dem SQL-Dienstprogramm einwandfrei funktionierte und ich auch einige Informatica-Zuordnungen erstellt hatte, die dasselbe verwendeten. Ich habe viel über dieses Zeug gestöbert und die Vorschläge, die mir angeboten wurden, angewendet, nachdem ich den Status von "lsnrctl" in öffentlichen Foren gepingt hatte, aber ohne Erfolg. An diesem Morgen habe ich jedoch erneut versucht, eine neue Verbindung herzustellen, und Voila, es hat ohne Probleme funktioniert. Ich vermute, nachdem ich ein paar Beiträge gelesen habe, die der Hörer manchmal hört, bevor die DB eine Verbindung herstellt, oder so (entschuldigen Sie mich für meinen groben Hinweis, da ich hier ein Neuling bin), aber ich schlage vor, die Maschine einfach neu zu starten und erneut zu überprüfen.

2
user2905345

Ich bin auf das gleiche Problem gestoßen und habe es durch einen Neustart des OracleServiceXE-Dienstes behoben. Gehen Sie zu Services.msc und überprüfen Sie, ob der Dienst 'OracleServiceXE' aktiv ist

2
Vijay Thayalan

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

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

Prost

1
Akshay Lokur

Ich hatte ein ähnliches Problem in der 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.

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

1

Überprüfen Sie dies, indem Sie tnsping und den Instanznamen auf dem Hostcomputer ausführen. Es wird u die tns-Beschreibung geben 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 vollständige tns Beschreibung, wo ich fand, dass Host-Name unterschiedlich ist .. :)

1
Abhishek Banik

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

Fehler, den ich bekommen habe:

Java.sql.SQLException: Listener hat die Verbindung mit folgendem Fehler abgelehnt: ORA-12505, TNS: Der Listener kennt die im Verbindungsdeskriptor angegebene SID derzeit nicht. Der vom Client verwendete Verbindungsdeskriptor lautete: 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

Bitte überprüfen Sie, ob sowohl OracleServiceXE als auch OracleXETNSListener den Status haben, der beim Navigieren durch start->run->services.msc gestartet wurde.

Für meinen Fall wurde nur OracleXETNSListener gestartet, aber OracleServiceXE wurde nicht gestartet, als ich mit right clicking -> start anfing und die Verbindung überprüfte, die für mich funktioniert

1
user5211481

Ich habe plötzlich das gleiche Problem, nachdem ich mit ein paar cmd's rumgespielt habe. Es stellte sich heraus, dass Oracle SERVICE XE nicht mehr ausgeführt wurde. Ich habe 2 Sekunden gebraucht, um es über die Verwaltungstools neu zu starten. tnx!

1
Brian Mk

Abgesehen von der Ausführung von Diensten (OracleServiceXE, OracleXETNSListener) besteht die Möglichkeit, dass Ihre Antivirensoftware/Firewall diese weiterhin blockiert. Stellen Sie einfach sicher, dass sie nicht blockiert sind. enter image description here

0
sql_dummy

In meinem Fall hat es nicht geklappt, schließlich habe ich meinen Oracle- und TNS-Listener neu gestartet und alles hat funktioniert. Hat 2 Tage gekämpft.

0
Amarjeet

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

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

0
Kisanagaram

Ich habe diesen Fehler ORA-12505, TNS: Der Listener kennt die im Verbindungsdeskriptor angegebene SID derzeit 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 der richtige und die beiden obligatorischen Oracle-Dienste OracleServiceXE , OracleXETNSListener waren aktiv .

Wie ich dieses Problem gelöst habe (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
r-sunny

Ich habe es gerade behoben, indem ich oracleService in services neu gestartet/gestartet habe