Pergunta

Às vezes eu fico Oracle problemas de conexão porque eu não consigo descobrir o que tnsnames.ora meu arquivo de banco de dados cliente está a utilizar.

Qual é a melhor maneira de descobrir isso?++feliz para várias soluções de plataforma.

Foi útil?

Solução

A Oracle fornece um utilitário chamado tnsping:

R:\>tnsping someconnection

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:38:07

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora

TNS-03505: Failed to resolve name

R:\>


R:\>tnsping entpr01

TNS Ping Utility for 32-bit Windows: Version 9.0.1.3.1 - Production on 27-AUG-20
08 10:39:22

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\Oracle92\network\ADMIN\sqlnet.ora
C:\Oracle92\network\ADMIN\tnsnames.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = **)
 (PROTOCOL = TCP) (Host = ****) (Port = 1521))) (CONNECT_DATA = (SID = ENTPR0
1)))
OK (40 msec)

R:\>

Este deve mostrar o que de arquivo que você está usando.O utilitário fica no Oracle bin diretório.

Outras dicas

Para linux:

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'open.*tnsnames.ora'

mostra algo como isto:

open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7

Mudança para

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'tnsnames.ora'

vai mostrar todos os caminhos de arquivo que estão a falhar.

Há um outro lugar onde o TNS local é armazenado:Se você estiver usando o Windows, abra regedit e navegue para My HKEY Local Machine/Software/ORACLE/KEY_OraClient10_home1 onde KEY_OraClient10_home1 é o Oracle home.Se houver uma entrada de seqüência de caracteres chamado TNS_ADMIN, e , em seguida, o valor de entrada que irá apontar para o TNS arquivo que a Oracle está usando em seu computador.

Para Windows: Filemon da SysInternals vai mostrar quais arquivos estão sendo acessados.

Lembre-se de definir filtros para que você não dominado pelo falante arquivo do sistema de tráfego.

Filter Dialog

Adicionado: Filemon não funciona com as mais recentes versões do Windows, assim, você poderá ter que usar Monitor De Processo.

Na minha máquina de desenvolvimento, tenho três versões diferentes do software de cliente Oracle.Eu gerenciar o tnsnames.ora arquivo em um deles.Nos outros dois, de eu ter entrado no tnsnames.ora arquivo:

ifile=path_to_tnsnames.ora_file/tnsnames.ora

Desta forma, se por algum motivo errado tnsnames.ora o arquivo é usado por um cliente, ele sempre vai acabar em up-to-date versão.

Codeslave pergunta "não Deveria ser sempre "$ORACLE_ HOME/network/admin/tnsnames.ora"?A resposta é não, não é.Considere estas duas invocações de tnsping na mesma máquina:

C:\Documents and Settings\me>D:\Oracle\10.2.0_DB\BIN\tnsping orcl

TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-OCT-2
008 14:30:12

Copyright (c) 1997,  2007, Oracle.  All rights reserved.

Used parameter files:
D:\Oracle\10.2.0_DB\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))

OK (40 msec)

C:\Documents and Settings\me>tnsping orcl

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 09-OCT-2
008 14:30:21

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:
D:\oracle\10.2.0_Client\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = XXXX)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
OK (20 msec)

C:\Documents and Settings\me>

O arquivo de parâmetros locais, que dependem do que tnsping executável que você está executando (e, talvez, onde ele está sendo executado a partir de).Para tnsnames baseado no oracle rede, usando o TNS_ADMIN variável é a única maneira de assegurar que você está recebendo um consistente tnsnames.ora arquivo.(NOTA:Windows-centric resposta)

Por padrão, o tnsnames.ora está localizado em $ORACLE_HOME/network/admin directory em sistemas operacionais UNIX e no ORACLE_HOME etwork\admin directory em sistemas operacionais Windows.tnsnames.ora também podem ser armazenados nos seguintes locais:

O diretório especificado pela variável de ambiente TNS_ADMIN (ou o valor do registro)

Em sistemas operacionais UNIX, a configuração global directory.Por exemplo, no Sistema Operacional Solaris, este diretório é /var/opt/oracle

Se você tiver vários ORACLE_HOMES, esteja ciente de que você está usando, como a localização do tnsnames.ora arquivo pode variar de um ORACLE_HOME para o próximo.

Para a pessoa que mencionou a TWO_TASK variável de ambiente, que é usado para definir um padrão de banco de dados nome do serviço de conexão (que pode ser um banco de dados em outro servidor).O nome do serviço que você defina TWO_TASK para, em seguida, é procurado no tnsnames.ora arquivo quando você se conectar.

Não deveria ser sempre "$ORACLE_ HOME/network/admin/tnsnames.ora"?Em seguida, você pode apenas fazer "echo $oracle_ casa" ou *nix equivalente.

@Pete Holberton Você está totalmente correto.O que me lembra, há um outro macaco chave em obras chamado TWO_ TAREFA

De acordo com o http://www.orafaq.com/wiki/TNS_ADMIN
TNS_ADMIN é uma variável de ambiente que aponta para o diretório onde o SQL*Net arquivos de configuração (como sqlnet.ora e tnsnames.ora) estão localizados.

strace sqlplus -L scott/tiger@orcl ajuda-o a encontrar .tnsnames.ora em ficheiro /home/oracle para localizar o arquivo demora em vez de $ORACLE_HOME/network/admin/tnsnames.ora arquivo.Obrigado pela postagem.

A maneira mais fácil é, provavelmente, para verificar o CAMINHO variável de ambiente do processo que está se conectando ao banco de dados.Provavelmente o tnsnames.ora arquivo está em primeiro Oracle bin no caminho.. etwork\admin.Variável de ambiente TNS_ADMIN ou valor no registro (para o atual Oracle home) pode substituir isso.

Usando filemon, como sugerido por outros também irão fazer o truque.

Não resposta direta à sua pergunta, mas eu tenho sido bastante frustrado tentando me encontrar e atualizar todos os tnsnames arquivos, como eu tinha vários oracle instalações:Cliente, ferramentas de BI, OWB, etc, cada qual tinha sua própria oracle home.Acabei criando um utilitário chamado TNSNamesSync que irá atualizar todos os tnsnames em todas as casas de oracle.É sob a licença MIT, livre para usar aqui https://github.com/artybug/TNSNamesSync/releases

Os docs estão aqui:https://github.com/artchik/TNSNamesSync/blob/master/README.md

Este é apenas para Windows, no entanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top