Zur Oracle Datenbank verbinden - was kann schon schiefgehen
Eine Verbindung zu einer Oracle Datenbank herzustellen ist einfach, einen Eintrag in der TNSNAMES.ORA erstellen, SQL*Plus (oder SQLcl) mit dem Connect String <User>/<Passwort>@<TNSNAMES Alias> starten und schon steht die Verbindung. Doch was tun, wenn nicht? Dann geht es an die Fehlersuche und Ursachenforschung. Dieser Blogbeitrag erläutert die häufigsten Fehlermeldungen und zeigt, wie man damit umgeht. Die wichtigsten Werkzeuge dabei sind TNSPING und auch SQLPLUS. Beide gilt es, korrekt einzusetzen und deren Ausgaben zu interpretieren. Der Einfachheit halber beschränke ich mich auf die Namensauflösung per TNSNAMES.ORA. Wird ein zentrales LDAP Directory zur Namensauflösung verwendet, so erfolgt die Fehlersuche analog.
TNS-03505 / ORA-12154: Name konnte nicht aufgelöst werden
C:\Users\marco.mischke>tnsping ding
TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 19-JUN-2023 20:54:57
Copyright (c) 1997, 2021, Oracle. All rights reserved.
Parameterdateien verwendet:
C:\oracle\client19\network\admin\sqlnet.ora
TNS-03505: Name konnte nicht aufgelöst werden
Diese Fehlermeldung bedeutet, dass der angegebene Alias nicht in der TNSNAMES.ORA gefunden werden konnte. Eigentlich eine einfache Sache, jedoch mit mehreren möglichen Ursachen:
- Der Eintrag ist nicht in der TNSNAMES.ORA vorhanden.
- Es wurde die falsche TNSNAMES.ORA verwendet. Der angezeigte Pfad zur SQLNET.ORA gibt einen Hinweis auf den Pfad, aus dem die TNSNAMES.ORA gelesen wurde.
- In der SQLNET.ORA ist der Parameter NAMES.DEFAULT_DOMAIN gesetzt. Dann wird dessen Wert an den angebebenen Alias angehängt, sofern dieser keine Domain enthält und dann dieser Name in der TNSNAMES.ORA gesucht.
TNS-12545: CONNECT nicht erfolgreich, da Ziel-Host oder -Objekt nicht vorhanden
C:\Users\marco.mischke>tnsping dings
TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 19-JUN-2023 20:57:04
Copyright (c) 1997, 2021, Oracle. All rights reserved.
Parameterdateien verwendet:
C:\oracle\client19\network\admin\sqlnet.ora
Adapter TNSNAMES zur Auflösung des Alias verwendet
Verbindungsversuch mit (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=gibtsnicht.robotron.de)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl.robotron.de)))
TNS-12545: CONNECT nicht erfolgreich, da Ziel-Host oder -Objekt nicht vorhanden
Dieser Fehler bedeutet, dass der angebene Server nicht per DNS aufgelöst werden konnte. Daher muss hier der Wert von HOST in der Verbindungsdefinition überprüft werden, z.B. mit "ping" oder "nslookup".
TNS-12535: TNS: Timeout für Vorgang
C:\Users\marco.mischke>tnsping dings
TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 19-JUN-2023 20:59:12
Copyright (c) 1997, 2021, Oracle. All rights reserved.
Parameterdateien verwendet:
C:\oracle\client19\network\admin\sqlnet.ora
Adapter TNSNAMES zur Auflösung des Alias verwendet
Verbindungsversuch mit (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=google.de)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl.robotron.de)))
TNS-12535: TNS: Timeout für Vorgang
Der Timeout bedeutet, dass der angebene Host in der Verbindungsdefinition zwar korrekt ist, sich jedoch auf dem angegebenen Port nicht erreichen lässt. Ursache ist meist eine fehlende Freischaltung in einer Firewall.
TNS-12541: TNS: Kein Listener
C:\Users\marco.mischke>tnsping dings
TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 19-JUN-2023 20:57:58
Copyright (c) 1997, 2021, Oracle. All rights reserved.
Parameterdateien verwendet:
C:\oracle\client19\network\admin\sqlnet.ora
Adapter TNSNAMES zur Auflösung des Alias verwendet
Verbindungsversuch mit (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver.robotron.de)(PORT=1523)))(CONNECT_DATA=(SERVICE_NAME=orcl.robotron.de)))
TNS-12541: TNS: Kein Listener
Diese Fehlermeldung bedeutet, dass man es zumindest bis zum Server geschafft hat. Jedoch hat der Server keine Antwort gesendet und daher kann keine Verbindung zustande kommen. Dafür gibt es folgende mögliche Ursachen:
- Der in der Verbindungsbeschreibung angegebene Port ist nicht korrekt.
- Der Listener auf dem Datenbankserver läuft nicht.
- Der Listener auf dem Datenbankserver läuft zwar, ist aber nicht auf der angegebenen IP-Adresse registriert.
ORA-12514: TNS: Listener kann in Connect-Deskriptor angegebenen Service aktuell nicht auflösen
C:\Users\marco.mischke>sqlplus test/test@dings
SQL*Plus: Release 19.0.0.0.0 - Production on Mo Jun 19 21:01:32 2023
Version 19.15.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
ERROR:
ORA-12514: TNS: Listener kann in Connect-Deskriptor angegebenen Service aktuell nicht auflösen
Diese Fehlermeldung erhält man nicht bei TNSPING sondern nur bei Verwendung von SQL*Plus (oder einem beliebigen anderen Client). Denn TNSPING prüft den Aufbau der Verbindung nur bis zum Listener, also der Kombination aus Server und Port. Antwortet der Listener, ist der Test für TNSPING erfolgreich, den Servicenamen überprüft das Tool nicht.
C:\Users\marco.mischke>tnsping dings
TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 19-JUN-2023 21:01:13
Copyright (c) 1997, 2021, Oracle. All rights reserved.
Parameterdateien verwendet:
C:\oracle\client19\network\admin\sqlnet.ora
Adapter TNSNAMES zur Auflösung des Alias verwendet
Verbindungsversuch mit (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver.robotron.de)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl.robotron)))
OK (60 ms)
Der Servicename wird erst beim tatsächlichen Aufbau einer Datenbankverbindung benötigt. Daher sind die möglichen Ursachen dieses Fehlers folgende:
- Der Servicename ist falsch geschrieben
- Der Service ist tatsächlich nicht am Listener registriert. Entweder weil die zugehörige Datenbank nicht läuft oder der Service nicht gestartet ist.
- Die Einstellungen für die verschiedenen Listener-Parameter in der Datenbank sind fehlerhaft, so dass die Datenbank ihre Services nicht am Listener anmelden konnte.
ORA-01017: invalid username/password; logon denied
C:\Users\marco.mischke>sqlplus test/test@dings
SQL*Plus: Release 19.0.0.0.0 - Production on Mo Jun 19 21:02:31 2023
Version 19.15.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Erst wenn diese Fehlermeldung erscheint, hat man es bis zur Datenbank geschafft. Denn die Authentifizierung, die Prüfung von Nutzer und Passwort, erfolgt in der Datenbank selbst. An dieser Stelle hat der Listener erfolgreich einen Datenbankprozess gestartet und die Clientverbindung an diesen Prozess zur weiteren Bearbeitung weitergegeben.
Fazit
Wie man sieht, kann der Verbindungsaufbau an vielen Stellen scheitern. Idealerweise erhält man auch keine ORA-01017 Fehlermeldung bei der Überprüfung, wenn man korrekte Zugangsdaten für die Datenbank kennt. Denn auch hier können noch einige Fallstricke lauern, wie z.B. Services mit mehreren registrierten Instanzen.
Kommentare
Keine Kommentare