Einleitung:
Die Textdatei TNSNAMES.ORA verwendet der Oracle Client um sich an einer Oracle Datenbank anzumelden. Häufig besitzt auch der Oracle Server diese Datei, um sich an einem anderen Server anmelden zu könnnen (z.B. via Datenbank-Link).
Da ich schon WOCHEN meines Lebens mit der Fehlersuche verbracht habe, hier eine kleine Zusammenfassung
für alle die auch kurz vor der Verzweiflung sind.
Aufbau der Datei:
<alias> =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <hostname>)(PORT = <port>))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <service_name_der_db>)
)
)
Beschreibung der Parameter:
- hostname : Rechnername oder Ip-Adresse auf der Listener der Datenbank läuft
- port : Portnummer über der der Listener angesprochen werden kann
(meist 1521 oder 1526)
- server = dedicated oder shared. Verbindungsmodi des Clients zur DB
- service_name = Servicename der DB (meist der Instanzname)
Beispiel:
prod_db =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod)
)
)
Welche Aliasnamen sind zu empfehlen? Nehmen sie einen Namen, der eindeutig und leicht zu merken ist. Ideal: rechner_oraclesid Beispiel: myserver_prod_db Gängige Fehlerquellen (sortiert nach der Wahrscheinlichkeit ihres Auftretens): 1. Sie haben keinen Eintrag mit dem angegebenen Aliasnamen, oder haben ihn falsch geschrieben. Die Fehlermeldung lautet hier:
SQL> connect system/manager@prod_bp
ERROR:
ORA-12154: TNS: Angegebener Connect Identifier konnte nicht aufgelöst werden
Lösungen: Überprüfen Sie wiviele TNSNAMES.ORA Dateien sie auf dem gesamten Client
besitzen, die in einem network/admin Verzeichnis liegen (nicht samples) Evtl editieren Sie die falsche Datei im falschen Verzeichnis. Haben Sie nur eine Datei, dann prüfen Sie die Existenz des Alias-Namens Prüfen Sie, ob in der Datei sqlnet.ora (im gleichen Verzeichnis)
folgender Eintrag steht:
NAMES.DEFAULT_DOMAIN=<irgendeine_tolle_domaine.de>
z.B.: NAMES.DEFAULT_DOMAIN=muniqsoft.de
Wenn ja, fügen Sie bitte diesen Domain-Namen an den Alias-Namen
der TNSNAMES.ORA an:
prod_db.muniqsoft.de =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod)
)
)
2. Der Service-Name passt nicht zur Datenbank. Prüfen Sie folgende
Parameter in der Datenbank:
SQL> show parameter service_names
NAME TYPE VALUE
--------- ----------- -----------
service_names String prod
SQL> show parameter db_domain
NAME TYPE VALUE
--------- ----------- -----------
db_domain String muniqsoft.de
Der Service-Name muss gesetzt werden auf <service_names>.<db_domain>
also hier:
prod.muniqsoft.de
3. Die Datenbank (oder der Dient unter Windows) wurde noch nicht
gestartet. Hier erscheint die Fehlermeldung:
SQL> connect system/manager@muso
ERROR:
ORA-12514: TNS: Listener kann in Connect-Deskriptor angegebenen Service
aktuell nicht auflösen
Lösung: Starten Sie die Datenbank bzw den Dienst
dos> net start oracleserviceprod
dos><ORACLE_HOME>/bin/sqlplus "/ as sysdba"
sql> startup
4. Der Listener wurde nicht gestartet, oder ist abgestürzt. Die Fehlermeldung dazu:
SQL> connect system/manager@muso
ERROR:
ORA-12541: TNS: Kein Listener
Lösung: Starten Sie den Listener auf der Datenbank-Seite
dos/unix> <oracle_home>/lsnrctl start
Prüfen Sie, ob die Listener-Portnummer zum Eintrag in der TNSNAMES.ORA passt
Alternativen zur TNSNAMES.O
Anmeldung in SQL*Plus mit DESCRIPTION String
dos/unix>sqlplus /nolog
Bitte alles in eine Zeile schreiben !
sql>connect system/manager@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = prod)))
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.