Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Determinando a localização do arquivo tnsnames.ora relevante


De acordo com a Oracle, esses locais são pesquisados ​​por tnsnames.ora , resp. sqlnet.ora e ldap.ora :
  1. Arquivos Oracle Net no diretório de trabalho atual (PWD/CWD)
  2. TNS_ADMIN definido por sessão ou por script definido pelo usuário
  3. TNS_ADMIN definido como uma variável de ambiente global
  4. TNS_ADMIN definido no registro
  5. Arquivos Oracle Net em %ORACLE_HOME/network|net80\admin (local padrão do Oracle)

No entanto, não tenho certeza se cada aplicativo/driver segue esta lista. Eu peguei esta lista do Oracle Document 111942.1 referente ao Oracle 9i, então pode estar desatualizado.

No Guia do Administrador do Database Net Services, a ordem é
  1. TNS_ADMIN definido pela variável de ambiente
  2. TNS_ADMIN definido no registro (se TNS_ADMIN variável de ambiente não está presente)
  3. %ORACLE_HOME%/network/admin diretório (se TNS_ADMIN variável de ambiente não está presente)

Eu recomendaria definir uma variável de ambiente para TNS_ADMIN e use apenas um arquivo tnsnames.ora. Para estar no lado seguro, verifique também seus valores de registro.

Se seus arquivos não localizado em %ORACLE_HOME%\network\admin , recomendo criar um link simbólico para ele - apenas para estar no muito lado seguro, por ex. mklink /d %ORACLE_HOME%\network\admin c:\Oracle\common\settings\admin

Outra nota, você não precisa "brincar" com seu arquivo tnsnames.ora. Com o Process Monitor da Microsoft Sysinternals você pode monitorar cada acesso de arquivo, ou seja, o filtro seria Path contains tnsnames

Atualizar

Quando executo um teste na minha máquina, recebo a seguinte ordem:
  1. Variável de ambiente TNS_ADMIN
  2. Chave de registro HKEY_CURRENT_USER\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN

  3. Chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN , resp. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN

    -> Somente se TNS_ADMIN A variável de ambiente não está definida.
  4. %ORACLE_HOME%\network\admin
  5. Diretório atual (que pode ser diferente do diretório em que seu aplicativo está localizado)
  6. Pasta onde seu aplicativo está localizado

Atualização 2

Obviamente não há busca de correção, varia para diferentes provedores/drivers. Talvez também dependa da versão do Oracle.

Por exemplo, o Servidor HTTP OracleTNS_ADMIN configuração de opmn.xml arquivo de configuração.

Outro exemplo, para o driver gerenciado ODP.NET (Oracle.ManagedDataAccess) beta versão, encontrei este pedido em Oracle Managed and TNS Names :
  1. alias da fonte de dados na seção 'dataSources' em <oracle.manageddataaccess.client> seção no arquivo de configuração .NET (ou seja, machine.config , web.config , user.config ).
  2. alias da fonte de dados no tnsnames.ora arquivo no local especificado por TNS_ADMIN no arquivo de configuração .NET.
  3. alias da fonte de dados no tnsnames.ora arquivo presente no mesmo diretório que o .exe .
  4. alias da fonte de dados no tnsnames.ora arquivo presente em %TNS_ADMIN%
    (onde %TNS_ADMIN% é uma configuração de variável de ambiente).
  5. alias da fonte de dados no tnsnames.ora arquivo presente em %ORACLE_HOME%\network\admin
    (onde %ORACLE_HOME% é uma configuração de variável de ambiente).

Na documentação oficial (12c Release 4 (12.1.0.2.4)) diz:
  1. alias da fonte de dados em dataSources seção em <oracle.manageddataaccess.client> seção no arquivo de configuração .NET (ou seja, machine.config , web.config , user.config ).
  2. alias da fonte de dados no tnsnames.ora arquivo no local especificado por TNS_ADMIN no arquivo de configuração .NET. Os locais podem consistir em caminhos de diretório absolutos ou relativos.
  3. alias da fonte de dados no tnsnames.ora arquivo presente no mesmo diretório que o .exe .

No entanto, com base em alguns testes que fiz com o driver gerenciado ODP.NET (4.121.2.0), leva %ORACLE_HOME%\network\admin e TNS_ADMIN Variável de ambiente em consideração. Bloqueios como a documentação não está 100% correto.