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
Antworten:
Ich habe dieses Problem behoben, indem ich meine JDBC-Zeichenfolge korrigiert habe.
Zum Beispiel sollte die richtige JDBC-Zeichenfolge ...
Aber der JDBS-String, den ich verwendet habe, ist ...
(Hinweis: zwischen
1521
undXE
sollte a sein/
)Diese fehlerhafte JDBC-Zeichenfolge gibt mir auch einen ORA-12505-Fehler.
quelle
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-12505
bedeutet, 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: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.msc
Sie 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.)
(Ersetzen Sie
system-password
das 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
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.)
quelle
SP2-0734: unknown command beginning "system/ora..." - rest of line ignored.
auf allen 3system/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 Siesqlplus
durchconnect
.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
Jetzt können Sie den Service sehen.
Auch wenn Sie diesen nicht sehen, probieren Sie ihn aus
Das sollte wohl funktionieren ...
quelle
local_listener
wird der orcl-Listener nun in angezeigtlsnrctl
. Tausend Dank!ORA-65040: operation not allowed from within a pluggable database
Was bedeutet das? JDBC kann nicht konfiguriert werden: /alter system set local_listener = ...
arbeitete für mich.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
OracleServiceXE
danach, um eine Verbindung herzustellen ...quelle
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
quelle
Ich habe dieses Problem durch Korrigieren meines JDBC-Codes gelöst.
Die richtige JDBC-Zeichenfolge sollte ...
Aber die JDBC-Zeichenfolge, die ich verwendete, war ...
Der Fehler, orcl anstelle von xe anzugeben, zeigte diesen Fehler, da der SID-Name falsch war.
quelle
conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");
funktioniert.Mein Problem ist behoben, wenn ich den folgenden Code verwende:
quelle
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
SID
aus demSID_LIST
unten stehenden hinzugefügt (Abschnitt zwischen den Sternen *).Dieser Fehler wurde wie folgt behoben:
Gestoppt und die Datenbank
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.
quelle
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) ...
quelle
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.
quelle
Oracle: Syntax für dünne Dienstnamen
Thin-Style-Dienstnamen werden nur vom JDBC Thin-Treiber unterstützt. Die Syntax lautet:
@ // Hostname: Portnummer / Dienstname
http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
quelle
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:
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.
quelle
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.
quelle
Ich hatte das gleiche Problem. Um dieses Problem zu beheben, habe ich zuerst meinen Listener neu konfiguriert,
netca
danach habe ich meine alte Datenbank, die ORCL war, mit verwendetdbca
und dann die neue Datenbank erneut mit erstelltdbca
quelle
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
quelle
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
quelle
Wenn Sie Oracle Express Edition verwenden, sollten Sie diese URL haben
Ich hatte ein ähnliches Problem mit dem Liquibase-Konfigurations-Plugin in pom.xml. Und ich habe meine Konfiguration geändert:
quelle
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 ...
quelle
Ü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 .. :)
quelle
Bitte überprüfen Sie beide
OracleServiceXE
und lassen SieOracleXETNSListener
den Status starten, wenn Sie durch navigierenstart->run->services.msc
.Denn mein Fall wurde nur
OracleXETNSListener
gestartet, aberOracleServiceXE
nicht gestartet, als ich bei anfingright clicking -> start
und die Verbindung überprüfte, ob sie für mich funktioniertquelle
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.
quelle
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.
quelle
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.
quelle
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)
quelle
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.
quelle
Ich habe es gerade behoben, indem ich oracleService in Diensten neu gestartet / gestartet habe
quelle
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.
quelle
Ich habe den Datenbanklink nur falsch erstellt.
Eine einfache Lösung für mich war, einfach 'SID' in SERVICE_NAME zu ändern
Ändern
zu
mein Problem behoben.
quelle