2015-02-02 30 views
6

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 nei seguenti luoghi:Determinazione della posizione del file tnsnames.ora rilevante

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 del 3 ° posizione del file tnsnames.ora mi sorprende.

ho i seguenti client Oracle installato 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 fa pensare che la 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, TOAD ha riconosciuto solo il file tns nella posizione 3.

Altri colleghi non hanno un file tns nella posizione 3 sulle proprie 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 attiva.

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 mio 64 bit di casa o devo due clienti Oracle installato?

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

Q3: Se lascio sul file TNS in posizione 3, sia dbForge e il lavoro ROSPO ma mi piacerebbe sapere perché così posso accuratamente capire come muoversi TNS informazioni da una macchina all'altra.

risposta

4

Basandosi solo sui percorsi, si hanno due client installati sospetti (Toad e dbforge sono strumenti, non client, quindi la 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 si utilizza un set comune di connessioni per tutti gli strumenti, eliminerei tutti i 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.

+0

In realtà, sembra che tu abbia tre case. Toad ne trova due e sembra che probabilmente hai installato anche 64 bit. –

+0

Sì, quando apro una finestra di cmnd e digito echo% TNS_ADMIN%, visualizza C: \ Windows \ TNS. Quindi, sembra come se avessi questa variabile d'ambiente di cui prima non ero a conoscenza. Questo sembra essere il bit mancante di informazioni di cui avevo bisogno. Grazie. – ChadD

+0

'HKEY_LOCAL_MACHINE \ Software \ Oracle' è per x64 Oracle Client. Ricerche client a 32 bit in 'HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Oracle' –

4

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

  1. file Oracle netti in directory di lavoro attuale (PWD/CWD)
  2. TNS_ADMIN definito sessionally o definiti dall'utente sceneggiatura
  3. TNS_ADMIN definita come una variabile di ambiente globale
  4. TNS_ADMIN definito il registro
  5. Oracle Net file 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.

Si consiglia di definire una variabile di ambiente per TNS_ADMIN e utilizzare solo un file tnsnames.ora. Per essere sicuri, controlla anche i valori del tuo registro.

Se i file sono non situato in %ORACLE_HOME%\network\admin, vi consiglio di creare un collegamento simbolico per esso - solo per essere al sicuro molto, per esempio mklink /d %ORACLE_HOME%\network\admin c:\Oracle\common\settings\admin

Un'altra nota, non è necessario "giocare" con il proprio file tnsnames.ora. Con Process Monitor da Microsoft Sysinternals è possibile monitorare ogni accesso ai file, vale a dire il filtro sarebbe Path contains tnsnames

Aggiornamento

Quando ho eseguito un test sulla mia macchina ottengo seguente ordine:

  1. variabile ambiente TNS_ADMIN
  2. delle chiavi del Registro HKEY_CURRENT_USER\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
  3. chiave del Registro di 012.387., 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 diverso da directory in cui si trova l'applicazione)
  6. cartella in cui si trova l'applicazione

Update 2

Ovviamente non c'è aggiusta la ricerca, varia per diversi provider/driver. Forse dipende anche dalla versione di Oracle.

Ad esempio, per ODP.NET Managed Driver (Oracle.ManagedDataAccess) beta versione, ho trovato questo ordine a Oracle Managed and TNS Names:

  1. fonte di dati alias nella sezione '' Datasources sotto <oracle.manageddataaccess.client> sezione nel file di configurazione .NET (vale a dire 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. dati sorgente alias nel file di tnsnames.ora presenti %ORACLE_HOME%\network\admin
    (dove %ORACLE_HOME% è un ambiente taratura variabile).

nella Gazzetta documentation (12c Release 4) si dice:

  1. dati di origine alias nel dataSources sezione in <oracle.manageddataaccess.client> sezione nel file di configurazione .NET (vale a dire 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, sulla base di alcuni test che ho fatto con il driver Managed ODP.NET (4.121.2.0) ci vogliono %ORACLE_HOME%\network\admin e TNS_ADMIN variabile ambiente in considerazione. Serrature come la documentazione non è corretta al 100%.

Problemi correlati