web-dev-qa-db-fra.com

Déterminer l'emplacement du fichier tnsnames.ora pertinent

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.

10
ChadD

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.

7
Michael S.

Selon Oracle, ces emplacements sont recherchés tnsnames.ora, resp. sqlnet.ora et ldap.ora:

  1. Fichiers Oracle Net dans le répertoire de travail actuel (PWD/CWD)
  2. TNS_ADMIN défini en session ou par un script défini par l'utilisateur
  3. TNS_ADMIN défini comme une variable d'environnement globale
  4. TNS_ADMIN défini dans le registre
  5. Fichiers Oracle Net dans %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

  1. TNS_ADMIN défini par la variable d'environnement
  2. TNS_ADMIN défini dans le registre (si TNS_ADMIN la variable d'environnement n'est pas présente)
  3. %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:

  1. Variable d'environnement TNS_ADMIN
  2. Clé d'enregistrement HKEY_CURRENT_USER\SOFTWARE\Oracle\KEY_{Oracle_Home_Name}\TNS_ADMIN
  3. 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.

  4. %Oracle_HOME%\network\admin
  5. Répertoire actuel (qui peut être différent du répertoire dans lequel se trouve votre application)
  6. Dossier où se trouve votre application

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 :

  1. alias de source de données dans la section "dataSources" sous <Oracle.manageddataaccess.client> section dans le fichier de configuration .NET (c'est-à-dire machine.config, web.config, user.config).
  2. alias de source de données dans le tnsnames.ora fichier à l'emplacement spécifié par TNS_ADMIN dans le fichier de configuration .NET.
  3. alias de source de données dans le tnsnames.ora fichier présent dans le même répertoire que le .exe.
  4. alias de source de données dans le tnsnames.ora fichier présent sur %TNS_ADMIN%
    (où %TNS_ADMIN% est un paramètre de variable d'environnement).
  5. alias de source de données dans le tnsnames.ora fichier présent sur %Oracle_HOME%\network\admin
    (où %Oracle_HOME% est un paramètre de variable d'environnement).

En officiel documentation (12c Release 4 (12.1.0.2.4)), il est dit:

  1. alias de source de données dans la section dataSources sous <Oracle.manageddataaccess.client> section dans le fichier de configuration .NET (c'est-à-dire machine.config, web.config, user.config).
  2. alias de source de données dans le 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.
  3. alias de source de données dans le 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%.

6
Wernfried Domscheit