Determinazione della posizione del file tnsnames.ora pertinente

Ho installato entrambi i driver Oracle 11g a 32 e 64 bit. Cerco il mio PC alla ricerca di file con il nome “tnsnames.ora” e ho trovato 3 nelle seguenti posizioni:

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’esistenza della terza posizione del file tnsnames.ora mi sorprende.

Ho i seguenti client Oracle installati sul mio 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" 

In base alla posizione di ciascun programma (Program Files (x86) vs. c: \ Program Files), questo mi suggerisce che il Toad, un programma a 32 bit, dovrebbe usare il driver a 32 bit e dbForge dovrebbe usare il driver a 64 bit.

dbForge sembra utilizzare il file tnsnames.ora in entrambe le posizioni # 2 o # 3. Lo so rinominando sistematicamente tutti tranne uno dei file tns e poi controllando se i nomi delle connessioni letti dal file sono disponibili quando si tenta di creare una nuova connessione con l’app.

Tuttavia, TOAD sembra riconoscere solo il file tnsnames.ora nella posizione n. 3 e non ha riconosciuto il file tnsnames.ora nella posizione 2! (Essendo che era un programma a 32 bit, non mi aspettavo che riconoscesse il file tns nella posizione 2 e questo era il caso). Per riassumere il test TOAD per motivi di chiarezza ottimistica, TOAD ha riconosciuto solo il file tns nella posizione 3.

Altri colleghi non hanno un file tns nella posizione 3 sulle loro macchine. Non sono sicuro del motivo per cui lo faccio. Quando eseguo Toad, mostra la seguente Home 2, con la Home page 32 bit come triggers.

 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 è a casa a 64 bit o sono installati due client Oracle?

Q2: Perché TOAD a 32 bit non usa il tns nella posizione n. 1 invece di utilizzare quello in posizione n. 3?

Q3: Se lascio il file tns nella posizione 3, funzionano sia dbForge che TOAD, ma mi piacerebbe sapere perché, così posso capire con precisione come spostare le informazioni da una macchina all’altra.

Basandoti sui tuoi percorsi hai due client installati come sospetti (Toad e dbforge sono strumenti, non client, quindi la tua terminologia è un po ‘spenta). Uno a 32 bit, l’altro a 64 bit. Sembra che Toad sia a 32 bit in base al suo percorso di installazione, ma eseguirlo e andare su Help | Support Bundle. Vedrai che l’intestazione superiore sarà “INFORMAZIONI APPLICAZIONE (32 bit)” o “INFORMAZIONI APPLICAZIONE (64 bit)” solo per confermare. Toad 11.6 è stato il primo ad introdurre una versione a 64 bit.

Toad vedrà solo il client Oracle che è per la stessa piattaforma. Quindi il tuo client a 64 bit è irrilevante per il bene di Toad. Il C: \ Windows \ TNS sembra essere una cartella utilizzata per la cartella TNS_ADMIN data la sua posizione dispari e il fatto che Toad lo veda. Al prompt dei comandi eseguire SET TNS_ADMIN e vedere se riporta “TNS_ADMIN = C: \ Windows \ TNS” Se lo fa, allora tutti gli strumenti dovrebbero usare quel tnsnames.ora. Questo è un override globale se si punta alla cartella contenente i file di configurazione della rete. Se TNS_ADMIN non è impostato come variabile di ambiente, cercarlo nel registro root di Oracle: HKEY_LOCAL_MACHINE \ Software \ Oracle.

Se utilizzi un set comune di connessioni per tutti i tuoi strumenti, eliminerei tutti i tuoi file tnsnames.ora. Inoltre, trasferisco la cartella C: \ Windows \ TNS in un posto più appropriato come C: \ Oracle \ Admin e creo i tuoi tnsnames.ora, sqlnet.ora e ldap.ora (se applicabile) lì. Crea una variabile di ambiente TNS_ADMIN che punta a quella posizione.

Secondo Oracle queste posizioni vengono cercate per tnsnames.ora , resp. sqlnet.ora e ldap.ora :

  1. File Oracle Net nella directory di lavoro attuale (PWD / CWD)
  2. TNS_ADMIN definito a livello di sessione o da script definito dall’utente
  3. TNS_ADMIN definito come variabile di ambiente globale
  4. TNS_ADMIN definito nel registro
  5. File Oracle Net in %ORACLE_HOME/network|net80\admin (percorso predefinito Oracle)

Tuttavia, non sono sicuro che ogni applicazione / driver segua questo elenco. Ho ottenuto questo elenco da Oracle Document 111942.1 riferito a Oracle 9i, quindi potrebbe essere obsoleto.

Nel Manuale dell’amministratore dei servizi Net Database l’ordine è

  1. TNS_ADMIN definito dalla variabile di ambiente
  2. TNS_ADMIN definito nel registro (se la variabile di ambiente TNS_ADMIN non è presente)
  3. %ORACLE_HOME%/network/admin directory (se la variabile di ambiente TNS_ADMIN non è presente)

Vorrei raccomandare di definire una variabile d’ambiente per TNS_ADMIN e usare solo un file tnsnames.ora. Per essere sicuri, controlla anche i valori del tuo registro.

Se i tuoi file non si trovano in %ORACLE_HOME%\network\admin , ti consiglio di creare un collegamento simbolico per questo – solo per essere al sicuro, ad esempio mklink /d %ORACLE_HOME%\network\admin c:\Oracle\common\settings\admin

Un’altra nota, non devi “giocare” con il tuo file tnsnames.ora. Con Process Monitor di Microsoft Sysinternals è ansible monitorare ogni accesso ai file, ovvero il filtro potrebbe Path contains tnsnames

Aggiornare

Quando eseguo un test sulla mia macchina ottengo l’ordine seguente:

  1. Variabile d’ambiente TNS_ADMIN
  2. Chiave di registro HKEY_CURRENT_USER\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
  3. Chiave di registro HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN , risp. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN

    -> Solo se la variabile di ambiente TNS_ADMIN non è impostata.

  4. %ORACLE_HOME%\network\admin
  5. Directory corrente (che può essere diversa dalla directory in cui si trova l’applicazione)
  6. Cartella in cui si trova la tua applicazione

Aggiornamento 2

Ovviamente non esiste una ricerca di correzioni, varia per diversi provider / driver. Forse dipende anche dalla versione di Oracle.

Ad esempio, Oracle HTTP Server legge TNS_ADMIN impostazione opmn.xml dal file di configurazione opmn.xml .

Un altro esempio, per la versione beta di ODP.NET Managed Driver (Oracle.ManagedDataAccess), ho trovato questo ordine su Oracle Managed e TNS Names :

  1. alias di origine dati nella sezione “dataSources” nella sezione nel file di configurazione .NET (ad esempio machine.config , web.config , user.config ).
  2. alias di origine dati nel file tnsnames.ora nella posizione specificata da TNS_ADMIN nel file di configurazione .NET.
  3. alias di origine dati nel file tnsnames.ora presente nella stessa directory di .exe .
  4. alias di origine dati nel file tnsnames.ora presente a %TNS_ADMIN%
    (dove %TNS_ADMIN% è un’impostazione di variabile di ambiente).
  5. alias di origine dati nel file tnsnames.ora presente in %ORACLE_HOME%\network\admin
    (dove %ORACLE_HOME% è un’impostazione di variabile di ambiente).

Nella documentazione ufficiale (12c Release 4 (12.1.0.2.4)) si dice:

  1. alias di origine dati nella sezione dataSources sezione nel file di configurazione .NET (ad esempio, machine.config , web.config , user.config ).
  2. alias di origine dati nel file tnsnames.ora nella posizione specificata da TNS_ADMIN nel file di configurazione .NET. Le posizioni possono essere costituite da percorsi di directory assoluti o relativi.
  3. alias di origine dati nel file tnsnames.ora presente nella stessa directory di .exe .

Tuttavia, in base ad alcuni test effettuati con ODP.NET Managed Driver (4.121.2.0), vengono presi in considerazione %ORACLE_HOME%\network\admin e la variabile di ambiente TNS_ADMIN . Serrature come la documentazione non è corretta al 100%.