Oracle
 sql >> Database >  >> RDS >> Oracle

Determinazione della posizione del file tnsnames.ora rilevante

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

  1. File Oracle Net nella directory di lavoro attuale (PWD/CWD)
  2. TNS_ADMIN definito in sessione o da script definito dall'utente
  3. TNS_ADMIN definita come una variabile d'ambiente globale
  4. TNS_ADMIN definito nel registro
  5. File Oracle Net in %ORACLE_HOME/network|net80\admin (Posizione predefinita 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.

Nella Guida dell'amministratore di Database Net Services l'ordine è

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

Consiglierei di definire una variabile di ambiente per TNS_ADMIN e usa un solo file tnsnames.ora. Per essere al sicuro, controlla anche i valori del tuo registro.

Se i tuoi file non situato in %ORACLE_HOME%\network\admin , ti consiglio di creare un collegamento simbolico per questo - solo per essere molto lato sicuro, ad es. 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 puoi monitorare ogni accesso ai file, ad es. il filtro sarebbe Path contains tnsnames

Aggiorna

Quando eseguo un test sulla mia macchina, ottengo il seguente ordine:

  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 TNS_ADMIN La variabile di ambiente non è impostata.

  4. %ORACLE_HOME%\network\admin
  5. Directory attuale (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 correzione, varia per diversi provider/driver. Forse dipende anche dalla versione di Oracle.

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

Un altro esempio, per il driver gestito ODP.NET (Oracle.ManagedDataAccess) beta versione, ho trovato questo ordine in Oracle Managed e TNS Names :

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

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

  1. alias origine dati in dataSources sezione in <oracle.manageddataaccess.client> sezione nel file di configurazione .NET (ad esempio machine.config , web.config , user.config ).
  2. alias origine dati in tnsnames.ora file 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 origine dati in tnsnames.ora file presente nella stessa directory di .exe .

Tuttavia, sulla base di alcuni test che ho fatto con ODP.NET Managed Driver (4.121.2.0) ci vuole %ORACLE_HOME%\network\admin e TNS_ADMIN In considerazione la variabile d'ambiente. Si blocca come se la documentazione non fosse corretta al 100%.