J'ai installé les pilotes Oracle 11g 32 et 64 bits. Je recherche mon PC à la recherche de fichiers avec le nom "tnsnames.ora" et en ai trouvé 3 aux emplacements suivants:
1. C:\Oracle\product\11203_32bit\CLIENT_1\NETWORK\ADMIN
2. C:\Oracle\product\11203_64bit\CLIENT_1\NETWORK\ADMIN
3. C:\Windows\TNS
L'existence du 3ème emplacement du fichier tnsnames.ora me surprend.
J'ai les clients Oracle suivants installés sur mon PC:
"C:\Program Files (x86)\Quest Software\Toad for Oracle 11.6\Toad.exe"
"C:\Program Files\Devart\dbForge Studio Express for Oracle\dbforgeoracle.exe"
En fonction de l'emplacement de chaque programme (Program Files (x86) vs c:\Program Files), cela me suggère que le Toad, un programme 32 bits, devrait utiliser le pilote 32 bits et dbForge devrait utiliser le pilote 64 bits.
dbForge semble utiliser le fichier tnsnames.ora à l'emplacement # 2 ou # 3. Je le sais en renommant systématiquement tous les fichiers tns sauf un, puis en vérifiant si les noms de connexion lus dans le fichier sont disponibles lorsque vous essayez de créer une nouvelle connexion avec l'application.
Cependant, TOAD semble reconnaître uniquement le fichier tnsnames.ora à l'emplacement # 3 et il n'a pas du tout reconnu le fichier tnsnames.ora à l'emplacement 2! (Étant donné qu'il s'agissait d'un programme 32 bits, je ne m'attendais pas à ce qu'il reconnaisse le fichier tns à l'emplacement 2 et c'était le cas). Pour résumer le test TOAD dans un souci de clarté, TOAD n'a reconnu que le fichier tns à l'emplacement 3.
D'autres collègues n'ont pas de fichier tns à l'emplacement 3 sur leurs machines. Je ne sais pas pourquoi je le fais. Lorsque j'exécute Toad, il montre les 2 Home suivants, avec le Home 32 bits comme étant celui actif.
OraClient11g_home1 (11.2.0.3)
Oracle_HOME:C:\app\C39293\product\11.2.0\client_1
Oracle_HOME_NAME:OraClient11g_home1
Oracle_HOME_KEY:HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraClient11g_home1
Oracle_SID:
NLS_LANG:AMERICAN_AMERICA.WE8MSWIN1252
SQLPATH:
LOCAL:
Client DLL:C:\app\C39293\product\11.2.0\client_1\oci.dll
TNSNames.ora:
SQLNet.ora:
LDAP.ora:
Login.sql:
GLogin.sql:
In system PATH:No
Home is valid:No
OraClient11g_home1_32bit (11.2.0.3)
Oracle_HOME:c:\Oracle\product\11203_32bit\CLIENT_1
Oracle_HOME_NAME:OraClient11g_home1_32bit
Oracle_HOME_KEY:HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraClient11g_home1_32bit
Oracle_SID:
NLS_LANG:AMERICAN_AMERICA.WE8MSWIN1252
SQLPATH:c:\Oracle\product\11203_32bit\CLIENT_1\dbs
LOCAL:
Client DLL:c:\Oracle\product\11203_32bit\CLIENT_1\bin\oci.dll
TNSNames.ora:
SQLNet.ora:
LDAP.ora:
Login.sql:
GLogin.sql:c:\Oracle\product\11203_32bit\CLIENT_1\sqlplus\admin\glogin.sql
In system PATH:Yes
Q1: OraClient11g_home1 est-il mon domicile 64 bits ou ai-je installé deux clients Oracle?
Q2: Pourquoi TOAD 32 bits n'utilise-t-il pas le tns à l'emplacement # 1 au lieu d'utiliser uniquement celui à l'emplacement # 3?
Q3: Si je laisse sur le fichier tns à l'emplacement 3, dbForge et TOAD fonctionnent mais j'aimerais savoir pourquoi afin que je puisse comprendre avec précision comment déplacer les informations tns d'une machine à une autre.
En fonction de vos chemins, vous avez deux clients installés comme vous le pensez (Toad et dbforge sont des outils, pas des clients, donc votre terminologie est un peu décalée). Un 32 bits, l'autre 64 bits. Il semble que Toad soit 32 bits en fonction de son chemin d'installation, mais exécutez-le et accédez à Aide | Support Bundle. Vous verrez que l'en-tête supérieur sera "APPLICATION INFORMATION (32 bits)" ou "APPLICATION INFORMATION (64 bits)" juste pour confirmer. Toad 11.6 a été le premier à introduire une version 64 bits.
Toad ne verra que le client Oracle correspondant à la même plate-forme que lui. Votre client 64 bits n'est donc pas pertinent pour Toad. Le C:\Windows\TNS semble être un dossier utilisé pour le dossier TNS_ADMIN étant donné son emplacement impair et le fait que Toad le voit. À l'invite de commande, exécutez SET TNS_ADMIN et voyez s'il signale "TNS_ADMIN = C:\Windows\TNS" Si c'est le cas, tous les outils doivent utiliser ce fichier tnsnames.ora. C'est un remplacement global si vous le souhaitez qui pointe vers le dossier contenant vos fichiers de configuration nets. Si TNS_ADMIN n'est pas défini comme variable d'environnement, recherchez-le dans votre registre racine Oracle: HKEY_LOCAL_MACHINE\Software\Oracle.
Si vous utilisez un ensemble commun de connexions pour tous vos outils, je supprimerais tous vos fichiers tnsnames.ora. Je déplacerais également ce dossier C:\Windows\TNS vers un endroit plus approprié comme C:\Oracle\Admin et y créerais tnsnames.ora, sqlnet.ora et ldap.ora (le cas échéant). Créez une variable d'environnement TNS_ADMIN pointant vers cet emplacement.
Selon Oracle, ces emplacements sont recherchés tnsnames.ora
, resp. sqlnet.ora
et ldap.ora
:
TNS_ADMIN
défini en session ou par un script défini par l'utilisateurTNS_ADMIN
défini comme une variable d'environnement globaleTNS_ADMIN
défini dans le registre%Oracle_HOME/network|net80\admin
(Emplacement par défaut d'Oracle)Cependant, je ne sais pas si chaque application/pilote suit cette liste. J'ai obtenu cette liste d'Oracle Document 111942.1 faisant référence à Oracle 9i, donc elle pourrait être obsolète.
Dans Guide de l'administrateur de Database Net Services la commande est
TNS_ADMIN
défini par la variable d'environnementTNS_ADMIN
défini dans le registre (si TNS_ADMIN
la variable d'environnement n'est pas présente)%Oracle_HOME%/network/admin
répertoire (si TNS_ADMIN
la variable d'environnement n'est pas présente)Je recommanderais de définir une variable d'environnement pour TNS_ADMIN
et utilisez un seul fichier tnsnames.ora. Afin d'être du bon côté, vérifiez également vos valeurs de registre.
Si vos fichiers ne sont pas situés dans %Oracle_HOME%\network\admin
, Je recommande de créer un lien symbolique pour cela - juste pour être sur le très côté sûr, par exemple mklink /d %Oracle_HOME%\network\admin c:\Oracle\common\settings\admin
Une autre remarque, vous n'avez pas à "jouer" avec votre fichier tnsnames.ora. Avec Process Monitor de Microsoft Sysinternals, vous pouvez surveiller chaque accès aux fichiers, c'est-à-dire que le filtre serait Path contains tnsnames
Mise à jour
Lorsque je lance un test sur ma machine, j'obtiens l'ordre suivant:
TNS_ADMIN
HKEY_CURRENT_USER\SOFTWARE\Oracle\KEY_{Oracle_Home_Name}\TNS_ADMIN
Clé d'enregistrement HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_{Oracle_Home_Name}\TNS_ADMIN
, resp. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oracle\KEY_{Oracle_Home_Name}\TNS_ADMIN
-> Uniquement si TNS_ADMIN
La variable d'environnement n'est pas définie.
%Oracle_HOME%\network\admin
Mise à jour 2
Évidemment, il n'y a pas de recherche de correctifs, cela varie selon les fournisseurs/pilotes. Cela dépend peut-être aussi de la version d'Oracle.
Par exemple, le Oracle HTTP Server lit TNS_ADMIN
réglage à partir de opmn.xml
fichier de configuration.
Un autre exemple, pour la version ODP.NET Managed Driver (Oracle.ManagedDataAccess) beta , j'ai trouvé cet ordre sur Oracle Managed et TNS Names :
<Oracle.manageddataaccess.client>
section dans le fichier de configuration .NET (c'est-à-dire machine.config
, web.config
, user.config
).tnsnames.ora
fichier à l'emplacement spécifié par TNS_ADMIN
dans le fichier de configuration .NET.tnsnames.ora
fichier présent dans le même répertoire que le .exe
.tnsnames.ora
fichier présent sur %TNS_ADMIN%
%TNS_ADMIN%
est un paramètre de variable d'environnement).tnsnames.ora
fichier présent sur %Oracle_HOME%\network\admin
%Oracle_HOME%
est un paramètre de variable d'environnement).En officiel documentation (12c Release 4 (12.1.0.2.4)), il est dit:
dataSources
sous <Oracle.manageddataaccess.client>
section dans le fichier de configuration .NET (c'est-à-dire machine.config
, web.config
, user.config
).tnsnames.ora
fichier à l'emplacement spécifié par TNS_ADMIN
dans le fichier de configuration .NET. Les emplacements peuvent être constitués de chemins de répertoire absolus ou relatifs.tnsnames.ora
fichier présent dans le même répertoire que le .exe
.Cependant, sur la base de certains tests effectués avec le pilote géré ODP.NET (4.121.2.0), il faut %Oracle_HOME%\network\admin
et TNS_ADMIN
Variable d'environnement prise en compte. Les verrous comme la documentation ne sont pas corrects à 100%.