Frage

Manchmal bekomme ich Oracle-Verbindungsprobleme, weil ich nicht herausfinden kann, welche tnsnames.ora-Datei mein Datenbank-Client verwendet.

Wie kann man das am besten herausfinden?++freuen uns über verschiedene Plattformlösungen.

War es hilfreich?

Lösung

Oracle stellt ein Dienstprogramm namens bereit tnsping:

R:\>tnsping someconnection

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:38:07

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora

TNS-03505: Failed to resolve name

R:\>


R:\>tnsping entpr01

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:39:22

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = **)
 (PROTOCOL = TCP) (Host = ****) (Port = 1521))) (CONNECT_DATA = (SID = ENTPR0
1)))
OK (40 msec)

R:\>

Hier sollte angezeigt werden, welche Datei Sie verwenden.Das Dienstprogramm befindet sich im Oracle bin Verzeichnis.

Andere Tipps

Für Linux:

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'open.*tnsnames.ora'

zeigt etwa so:

open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7

Wechseln zu

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'tnsnames.ora'

zeigt alle fehlerhaften Dateipfade an.

Es gibt einen anderen Ort, an dem der TNS-Standort gespeichert wird:Wenn Sie Windows verwenden, öffnen Sie es regedit und navigieren Sie zu My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1 Wo KEY_OraClient10_home1 ist Ihr Oracle-Zuhause.Wenn ein String-Eintrag aufgerufen wird TNS_ADMIN, dann verweist der Wert dieses Eintrags auf die TNS-Datei, die Oracle auf Ihrem Computer verwendet.

Für Windows: Filemon von SysInternals zeigt Ihnen, auf welche Dateien zugegriffen wird.

Denken Sie daran, Ihre Filter so einzustellen, dass Sie nicht vom gesprächigen Datenverkehr im Dateisystem überwältigt werden.

Filter Dialog

Hinzugefügt: Filemon funktioniert nicht mit neueren Windows-Versionen, daher müssen Sie es möglicherweise verwenden Prozessmonitor.

Auf meinem Entwicklungsrechner habe ich drei verschiedene Versionen der Oracle-Client-Software.Ich schaffe das tnsnames.ora Datei in einem von ihnen.In den anderen beiden habe ich die eingetragen tnsnames.ora Datei:

ifile=path_to_tnsnames.ora_file/tnsnames.ora

Auf diese Weise, wenn aus irgendeinem Grund das Falsche passiert tnsnames.ora Wenn die Datei von einem Client verwendet wird, wird immer die aktuelle Version angezeigt.

Codeslave fragt: „Sollte es nicht immer „$ORACLE_ HOME/network/admin/tnsnames.ora“ lauten?Die Antwort ist nein, das ist es nicht.Betrachten Sie diese beiden Aufrufe von tnsping auf demselben Computer:

C:\Documents and Settings\me>D:\Oracle\10.2.0_DB\BIN\tnsping orcl

TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-OCT-2
008 14:30:12

Copyright (c) 1997,  2007, Oracle.  All rights reserved.

Used parameter files:
D:\Oracle\10.2.0_DB\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))

OK (40 msec)

C:\Documents and Settings\me>tnsping orcl

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 09-OCT-2
008 14:30:21

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:
D:\oracle\10.2.0_Client\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = XXXX)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
OK (20 msec)

C:\Documents and Settings\me>

Beachten Sie die zwei unterschiedlichen Speicherorte der Parameterdateien, die davon abhängen, welche ausführbare tnsping-Datei Sie ausführen (und möglicherweise von wo aus sie ausgeführt wird).Für tnsnames-basierte Oracle-Netzwerke ist die Verwendung der TNS_ADMIN-Variable die einzige Möglichkeit, sicherzustellen, dass Sie eine konsistente tnsnames.ora-Datei erhalten.(NOTIZ:Windows-zentrierte Antwort)

Standardmäßig befindet sich tnsnames.ora im Verzeichnis $ORACLE_HOME/network/admin auf UNIX-Betriebssystemen und im Verzeichnis ORACLE_HOME etwork\admin auf Windows-Betriebssystemen.tnsnames.ora kann auch an folgenden Orten gespeichert werden:

Das durch die Umgebungsvariable TNS_ADMIN (oder den Registrierungswert) angegebene Verzeichnis.

Auf UNIX-Betriebssystemen das globale Konfigurationsverzeichnis.Unter dem Betriebssystem Solaris lautet dieses Verzeichnis beispielsweise /var/opt/oracle

Wenn Sie über mehrere ORACLE_HOMES verfügen, achten Sie darauf, welches Sie verwenden, da der Speicherort der Datei tnsnames.ora von einem ORACLE_HOME zum nächsten variieren kann.

Für die Person, die die Umgebungsvariable TWO_TASK erwähnt hat: Diese wird verwendet, um einen Standard-Datenbankdienstnamen festzulegen, zu dem eine Verbindung hergestellt werden soll (bei dem es sich um eine Datenbank auf einem anderen Server handeln könnte).Der Dienstname, den Sie für TWO_TASK festlegen, wird dann beim Herstellen einer Verbindung in der Datei tnsnames.ora nachgeschlagen.

Sollte es nicht immer „$ORACLE_ HOME/network/admin/tnsnames.ora“ lauten?Dann können Sie einfach „echo $oracle_home“ oder das *nix-Äquivalent ausführen.

@Pete Holberton Sie sind völlig korrekt.Was mich daran erinnert, dass ein weiterer Schraubenschlüssel in Arbeit ist, der TWO_TASK heißt

Nach http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN ist eine Umgebungsvariable, die auf das Verzeichnis verweist, in dem sich die SQL*Net-Konfigurationsdateien (wie sqlnet.ora und tnsnames.ora) befinden.

strace sqlplus -L scott/tiger@orcl hilft beim Finden .tnsnames.ora Datei auf /home/oracle um die benötigte Datei zu finden $ORACLE_HOME/network/admin/tnsnames.ora Datei.Danke für den Beitrag.

Der einfachste Weg ist wahrscheinlich, das zu überprüfen WEG Umgebungsvariable des Prozesses, der eine Verbindung zur Datenbank herstellt.Höchstwahrscheinlich befindet sich die Datei tnsnames.ora in erstes Oracle-bin-Verzeichnis im Pfad.. etzwerk\admin.Die Umgebungsvariable TNS_ADMIN oder der Wert in der Registrierung (für das aktuelle Oracle-Home) kann dies überschreiben.

Die Verwendung von Filemon, wie von anderen vorgeschlagen, reicht ebenfalls aus.

Keine direkte Antwort auf Ihre Frage, aber ich war selbst ziemlich frustriert, als ich versuchte, alle TNSNAMES-Dateien zu finden und zu aktualisieren, da ich mehrere Oracle-Installationen hatte:Client, BI-Tools, OWB usw., von denen jeder sein eigenes Oracle-Heim hatte.Am Ende habe ich ein Dienstprogramm namens TNSNamesSync erstellt, das alle TNS-Namen in allen Oracle-Häusern aktualisiert.Es steht unter der MIT-Lizenz und kann hier kostenlos verwendet werden https://github.com/artybug/TNSNamesSync/releases

Die Dokumente sind hier:https://github.com/artchik/TNSNamesSync/blob/master/README.md

Dies gilt allerdings nur für Windows.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top