Question

Parfois, j'ai des problèmes de connexion Oracle car je n'arrive pas à déterminer quel fichier tnsnames.ora mon client de base de données utilise.

Quelle est la meilleure façon de comprendre cela ?++ heureux pour diverses solutions de plate-forme.

Était-ce utile?

La solution

Oracle fournit un utilitaire appelé 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:\>

Cela devrait montrer quel fichier vous utilisez.L'utilitaire se trouve dans Oracle bin annuaire.

Autres conseils

Pour Linux :

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

montre quelque chose comme ceci :

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

Changer pour

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

affichera tous les chemins de fichiers qui échouent.

Il existe un autre endroit où l'emplacement TNS est stocké :Si vous utilisez Windows, ouvrez regedit et accédez à My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1KEY_OraClient10_home1 est votre maison Oracle.S'il existe une entrée de chaîne appelée TNS_ADMIN, la valeur de cette entrée pointera vers le fichier TNS qu'Oracle utilise sur votre ordinateur.

Pour les fenêtres: Filemon de SysInternals vous montrera quels fichiers sont consultés.

N'oubliez pas de définir vos filtres afin de ne pas être submergé par le trafic bavard du système de fichiers.

Filter Dialog

Ajoutée: Filemon ne fonctionne pas avec les versions plus récentes de Windows, vous devrez donc peut-être utiliser Moniteur de processus.

Sur ma machine de développement, j'ai trois versions différentes du logiciel client Oracle.Je gère le tnsnames.ora déposer dans l’un d’eux.Dans les deux autres, je suis entré dans le tnsnames.ora déposer:

ifile=path_to_tnsnames.ora_file/tnsnames.ora

De cette façon, si pour une raison quelconque le mauvais tnsnames.ora est utilisé par un client, il se retrouvera toujours avec la version à jour.

Codeslave demande « Cela ne devrait-il pas toujours être « $ORACLE_ HOME/network/admin/tnsnames.ora » ?La réponse est non, ce n'est pas le cas.Considérez ces deux invocations de tnsping sur la même machine :

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>

Notez les deux emplacements différents des fichiers de paramètres, qui dépendent de l'exécutable tnsping que vous exécutez (et peut-être de l'endroit à partir duquel il est exécuté).Pour les réseaux Oracle basés sur tnsnames, l'utilisation de la variable TNS_ADMIN est le seul moyen de garantir que vous obtenez un fichier tnsnames.ora cohérent.(NOTE:Réponse centrée sur Windows)

Par défaut, tnsnames.ora se trouve dans le répertoire $ORACLE_HOME/network/admin sur les systèmes d'exploitation UNIX et dans le répertoire ORACLE_HOME etwork\admin sur les systèmes d'exploitation Windows.tnsnames.ora peut également être stocké aux emplacements suivants :

Le répertoire spécifié par la variable d'environnement TNS_ADMIN (ou valeur de registre)

Sur les systèmes d'exploitation UNIX, le répertoire de configuration global.Par exemple, sur le système d'exploitation Solaris, ce répertoire est /var/opt/oracle

Si vous disposez de plusieurs ORACLE_HOMES, sachez lequel vous utilisez, car l'emplacement du fichier tnsnames.ora peut varier d'un ORACLE_HOME à l'autre.

Pour la personne qui a mentionné la variable d'environnement TWO_TASK, elle est utilisée pour définir un nom de service de base de données par défaut auquel se connecter (qui pourrait être une base de données sur un autre serveur).Le nom du service que vous avez défini pour TWO_TASK est ensuite recherché dans le fichier tnsnames.ora lorsque vous vous connectez.

Ne devrait-il pas toujours être "$ORACLE_ HOME/network/admin/tnsnames.ora" ?Ensuite, vous pouvez simplement faire "echo $oracle_ home" ou l'équivalent *nix.

@Pete holberton Vous avez tout à fait raison.Ce qui me rappelle qu'il y a une autre clé à molette en préparation appelée TWO_TASK.

Selon http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN est une variable d'environnement qui pointe vers le répertoire où se trouvent les fichiers de configuration SQL*Net (comme sqlnet.ora et tnsnames.ora).

strace sqlplus -L scott/tiger@orcl aide à trouver .tnsnames.ora fichier sur /home/oracle pour trouver le fichier qu'il faut au lieu de $ORACLE_HOME/network/admin/tnsnames.ora déposer.Merci pour la publication.

Le moyen le plus simple est probablement de vérifier CHEMIN variable d'environnement du processus qui se connecte à la base de données.Il est fort probable que le fichier tnsnames.ora se trouve dans premier répertoire Oracle bin dans le chemin.. éseau\admin.La variable d'environnement TNS_ADMIN ou la valeur du registre (pour le répertoire d'accueil Oracle actuel) peuvent remplacer cela.

Utiliser filemon comme suggéré par d'autres fera également l'affaire.

Ce n'est pas une réponse directe à votre question, mais j'ai moi-même été assez frustré d'essayer de trouver et de mettre à jour tous les fichiers tnsnames, car j'avais plusieurs installations Oracle :Client, outils BI, OWB, etc., chacun ayant sa propre maison Oracle.J'ai fini par créer un utilitaire appelé TNSNamesSync qui mettra à jour tous les noms tns dans toutes les maisons Oracle.C'est sous licence MIT, utilisation gratuite ici https://github.com/artybug/TNSNamesSync/releases

Les docs sont ici :https://github.com/artchik/TNSNamesSync/blob/master/README.md

Ceci est cependant uniquement pour Windows.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top