Wir haben eine lokal ausgeführte Anwendung, bei der der folgende Fehler auftritt:
ORA-12514: TNS: Der Listener kennt den im Verbindungsdeskriptor angeforderten Dienst derzeit nicht
Ich habe die Verbindung getestet, TNSPing
die korrekt aufgelöst wurde, und ich habe versucht SQLPlus
, eine Verbindung herzustellen, die mit demselben Fehler wie oben fehlgeschlagen ist. Ich habe diese Syntax verwendet für SQLPlus
:
sqlplus username/password@addressname[or host name]
Wir haben Folgendes überprüft:
- Der TNS-Listener auf dem Server wird ausgeführt.
- Oracle selbst auf dem Server wird ausgeführt.
Wir kennen keine Änderungen, die an dieser Umgebung vorgenommen wurden. Können wir noch etwas testen?
Antworten:
Ich hatte dieses Problem und das Update war , um sicherzustellen , in
tnsnames.ora
derSERVICE_NAME
ein gültiger Service - Namen in Ihrer Datenbank. Um gültige Dienstnamen herauszufinden, können Sie die folgende Abfrage in Oracle verwenden:Sobald ich aktualisiert habe
tnsnames.ora
auf:dann rannte ich:
Erfolg! Der Listener teilt Ihnen im Grunde mit, dass der von Ihnen verwendete Dienstname laut DB kein gültiger Dienst ist.
(* Ich habe sqlplus von der Win7-Client-Workstation zur Remote-Datenbank ausgeführt und den Datenbankadministratoren die Schuld gegeben;) *)
quelle
Ich weiß, dass dies eine alte Frage ist, aber immer noch unbeantwortet. Ich habe einen Tag lang recherchiert, aber zumindest in meinem Fall (Oracle 11.2 unter Windows 2008 R2) habe ich die einfachste Lösung gefunden und wollte sie teilen.
Der Fehler zeigt bei direkter Betrachtung an, dass der Listener den Dienstnamen nicht erkennt. Aber wo werden die Servicenamen aufbewahrt? Im
%ORACLE_HOME%\NETWORK\ADMIN\listener.ora
Die "SID_LIST" ist genau das, eine Liste von SIDs und Dienstnamen, die in einem Format gepaart sind, das Sie kopieren oder nachschlagen können.
Ich habe das Problem Dienstname hinzugefügt und dann in der Windows-Systemsteuerung "Dienste" einen "Neustart" für den Oracle-Listener-Dienst durchgeführt. Jetzt ist alles gut.
Beispielsweise könnte Ihre listener.ora-Datei zunächst folgendermaßen aussehen:
... Und damit ein Dienstname von erkannt wird
orcl
, können Sie ihn ändern in:quelle
listener.ora
die Namen gespeichert werden. Ich habe nicht einmal einelistener.ora
Datei. Ich bin auch auf einer Client-Workstation, auf der SQL Developer ausgeführt wird, und versuche, nur einen Datenbanklink zu erstellen, wenn der Fehler auftritt. Ich habe keinen Oracle Listener-Dienst zum Neustart.Ich hatte dieses Problem bei Windows Server 2008 R2 und Oracle 11g
Wenn Sie keinen Eintrag für Datenbankdienste haben, erstellen Sie einen und legen Sie die richtige globale Datenbank
sid
und Oracle Home fest.quelle
Unter meinen Umständen war der Fehler darauf zurückzuführen, dass der Listener den Dienst der Datenbank nicht registriert hatte. Ich habe dies durch die Registrierung der Dienste gelöst. Beispiel:
Mein Deskriptor in
tnsnames.ora
:Also registriere ich den Dienst
listener.ora
manuell:Starten Sie den Listener abschließend mit dem folgenden Befehl neu:
Getan!
quelle
Das Starten von OracleServiceXXX über die Datei services.msc funktionierte für mich unter Windows.
quelle
Dies sollte wirklich ein Kommentar zu Brad Rippes Antwort sein, aber leider nicht genug Wiederholung. Diese Antwort brachte mich zu 90% dorthin. In meinem Fall wurden bei der Installation und Konfiguration der Datenbanken Einträge in die Datei tnsnames.ora für die von mir ausgeführten Datenbanken eingefügt. Zunächst konnte ich durch Festlegen der Umgebungsvariablen (Windows) eine Verbindung zur Datenbank herstellen:
und dann verbinden mit
Führen Sie als Nächstes den Befehl aus Brad Rippes Antwort aus:
zeigten, dass die Namen nicht genau übereinstimmten. Die mit dem Datenbankkonfigurationsassistenten von Oracle erstellten Einträge waren ursprünglich:
Der Dienstname aus der Abfrage war nur
mydatabase
anstattmydatabase.mydomain.com
. Ich habe die Datei tnsnames.ora nur auf den Basisnamen ohne den Domain-Teil bearbeitet, sodass sie folgendermaßen aussahen:Ich habe den TNS Listener-Dienst neu gestartet (ich verwende häufig
lsnrctl stop
undlsnrctl start
über ein Administrator-Befehlsfenster [oder Windows Powershell] anstelle der Systemsteuerung "Dienste", aber beide funktionieren.) Danach konnte ich eine Verbindung herstellen.quelle
Ich hatte das gleiche Problem. Für mich nur schreiben
hat den Trick gemacht, dadurch wird eine Verbindung zum Standarddienstnamen hergestellt, denke ich.
quelle
jdbc:oracle:thin:@//localhost:1521/orcl
. Die korrigierte Verbindungszeichenfolge zur Behebung dieses Fehlers war :jdbc:oracle:thin:@localhost:1521
.Was für mich funktionierte, war wirklich einfach. Ich musste den Dienst nur manuell in den "Windows-Diensten" (services.msc in cmd trompt) starten. Mein Servicename lautet: OracleServiceXXXXX.
quelle
Überprüfen Sie, ob die Datenbank aktiv ist. Melden Sie sich am Server an, setzen Sie die Umgebungsvariable ORACLE_SID auf Ihre Datenbank-SID und führen Sie SQL * Plus als lokale Verbindung aus.
quelle
Dieser Fehler kann auftreten, wenn eine Anwendung für jede Datenbankinteraktion eine neue Verbindung herstellt oder die Verbindungen nicht ordnungsgemäß geschlossen werden. Eines der kostenlosen Tools zum Überwachen und Bestätigen ist der Oracle SQL-Entwickler (obwohl dies nicht das einzige Tool ist, mit dem Sie DB-Sitzungen überwachen können).
Sie können das Tool von der Oracle-Website Sql Developer herunterladen
Hier ist ein Screenshot, wie Sie Ihre Sitzungen überwachen können. (Wenn sich während des ORA-12514-Fehlers viele Sitzungen für Ihren Anwendungsbenutzer häufen, ist dies ein guter Hinweis darauf, dass möglicherweise ein Verbindungspoolproblem vorliegt.)
quelle
Ich habe dieses Problem in meiner Linux-Umgebung behoben, indem ich die IP meines Computers in der Datei / etc / hosts aktualisiert habe.
Sie können Ihre Netzwerk-IP (inet end.) Überprüfen mit:
Überprüfen Sie, ob Ihre IP-Adresse mit der Datei / etc / hosts übereinstimmt:
Bearbeiten Sie Ihre Datei / etc / hosts, falls erforderlich:
Tschüss.
quelle
Für diejenigen, die Oracle in einer VM ausführen (wie ich), ist dieses Problem aufgetreten, weil auf meiner VM nicht genügend Arbeitsspeicher vorhanden ist, was anscheinend verhindert hat, dass OracleDB ordnungsgemäß gestartet / ausgeführt wird. Durch Erhöhen des VM-Speichers und Neustarten wurde das Problem behoben.
quelle
Viele Antworten hier, aber hier kommt ein funktionierendes Beispiel mit Code, den Sie sofort kopieren, einfügen und testen können:
Für mich wurde der Fehler 12514 behoben, nachdem der richtige SERVICE_NAME angegeben wurde. Sie finden das auf dem Server in der Datei,
tnsnames.ora
die 3 vordefinierte Dienstnamen enthält (einer davon ist "XE").HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. Auf 64-Bit-Maschinen schreiben Sie zusätzlich zuHKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
nur 4 MB finden und eine rein verwaltete DLL ist, die in 32-Bit- und 64-Bit-Prozessen funktioniert und hängt von keiner anderen DLL ab und erfordert keine Registrierungseinträge.Wenn das
SERVICE_NAME=XE
falsch ist, erhalten Sie den Fehler 12514. DasSERVICE_NAME
ist optional. Sie können es auch weglassen.quelle
Ich hatte auch das gleiche Problem und verbrachte 3 Tage damit, es auszugraben.
Dies liegt an Ihrem falschen TNS-Serviceeintrag.
Überprüfen Sie zunächst, ob Sie mit SQL>
sqlplus sys@orastand as sysdba
(orastand
ist eine Standby-Datenbank) eine Verbindung zur Standby-Datenbank von der Primärdatenbank aus herstellen können .Wenn Sie keine Verbindung herstellen können, liegt ein Problem mit dem Dienst vor. Korrigieren Sie die Eingabe des Dienstnamens in die TNS-Datei am primären Ende.
Überprüfen Sie die Standby-Datenbank auf die gleiche Weise. Nehmen Sie die Änderungen bei Bedarf auch hier vor.
Stellen Sie sicher, dass der
log_archive_dest_2
Parameter den richtigen Dienstnamen hat.quelle
Ich habe den gleichen Fehler erhalten, weil die angegebene Remote-SID falsch war:
Ich habe die Systemdatenbank abgefragt:
Wählen Sie * aus global_name;
und fand meine Remote-SID ("XE").
Dann konnte ich mich problemlos verbinden.
quelle
In meinem Fall hatte die Datenbank keinen Speicherplatz mehr. Was dazu führte, dass es nicht reagierte. Nachdem ich das Problem geklärt hatte, funktionierte alles wieder.
quelle
Für mich wurde dies durch die Verwendung einer dynamischen IP-Adresse bei der Installation verursacht. Ich habe Oracle mit einer statischen IP-Adresse neu installiert und dann war alles in Ordnung
quelle
Der Neustart der VM hat bei mir funktioniert
quelle
Mein Problem wurde behoben, indem die 'SID' in der URL durch 'Dienstname' und den richtigen Host ersetzt wurde.
quelle
tnslsnr
ist aktiv, aber die Datenbank ist nicht verfügbar.Für Oracle-Neulinge ist es nicht offensichtlich, dass die Datenbank möglicherweise nicht verfügbar ist, während Verbindungen akzeptiert werden.
Ich musste die Datenbank so manuell starten
Und dann in der SQL-Konsole
In meinem Fall konnte ich nicht starten, bekam aber eine weitere Fehlermeldung und fand die Ursache eines Problems - ich musste den Hostnamen ändern und dann war der automatische Start der Datenbank wieder funktionsfähig.
quelle
Das Problem war, dass meine Verbindungszeichenfolgen-URL den Datenbanknamen anstelle der SID enthielt. Das Ersetzen des Datenbanknamens durch die SID der Oracle-Datenbankverbindung hat dieses Problem behoben.
Um Ihre Oracle-SIDs zu kennen, können Sie die
tnsnames.ora
Datei durchsuchen .XE
war die eigentliche SID, so sieht meine Tomcat-Verbindungszeichenfolge jetzt aus:Meine Serverversion war "Oracle 11.2 Express", aber die Lösung sollte auch auf anderen Versionen funktionieren.
quelle
In meinem Fall fehlten in der Datei tnsnames.ora runde Klammern um SERVICE_NAME .
quelle
Für diejenigen, die Spring-Boot und JDBC für die Verbindung verwenden. Sie müssen vorsichtig sein, wenn Sie jdbcUrl in application.properties schreiben
Mit SID in Datenbankverbindung -
source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID
Mit Dienstname in Datenbankverbindung
globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
Das hat bei mir funktioniert :)
quelle
Ich habe die folgende Problemumgehung implementiert, um dieses Problem zu beheben.
Ich habe ORACLE_HOME über die Eingabeaufforderung festgelegt (Rechtsklick auf cmd.exe und Als Systemadministrator ausführen).
Wird unter dem Befehl verwendet
set oracle_home="path to the oracle home"
Gehen Sie zu Alle Programme -> Oracle -ora home1 -> Migrationstools für die Konfiguration -> Net Manager -> Listener
Wählen Sie aus der Dropdown-Liste Datenbankdienste aus. Sowohl der globale Datenbankname als auch die SID sind gleich eingestellt (in meinem Fall ORCL). Legen Sie das Oracle Home Directory fest.
Beispiel für ein Oracle Net Manager-Fenster aus der Oracle-Dokumentation:
quelle