Pergunta

Recentemente, mudou física DB, os novos servidores, novos locais, mesmo esquema de banco de dados e de dados e desde a mudança mais, sempre que tentar ligar diretamente para o DB em nossas próprias aplicações do tipo de mesa cerca de metade do tempo que recebo este erro :

SQL*Loader-704: Internal error: ulconnect: OCIServerAttach[0]
ORA-12545: Connect failed because target host or object does not exist

O resto do tempo, ele se conecta imediatamente, sem quaisquer problemas. Nossas aplicações que estabelecem conexões via JDBC não parece ter quaisquer problemas, mas o que fazemos quando passar por algo que faz um tnsnames.ora pesquisa (ou esse é o meu palpite, pelo menos). Tnsping obras 100%, mas usando um executável oráculo como SQLLDDR falhar pelo menos 50% do tempo. Aqui está um snppet anónimos do nosso arquivo TSNNAMES e uma saída de TNSPING:

DB_CONNECTION =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = MY.URL.COM)
  )
)

E o TNSPING:

C:\>TNSPING DB_CONNECTION
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0

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

Used parameter files:
C:\oracle\ora92\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 1.2.3.4)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = MY.URL.COM)))
OK (200 msec)

Eu tenho o SID do DB, que é o que as conexões JDBC dependem mas adicionando-o ao tnsnames.ora não melhora as probabilidades de fazer uma ligação. Eu não sei o suficiente sobre como o arquivo tnsnames está sendo usada pela Oracle para inteligentemente resolver esse problema por isso, se você tiver sugestões ou ver algo que é, obviamente, faltando, por favor me avise.

EDIT:. O novo DB pode ser duas bases de dados carga balanceada que pode ser parte do problema

Foi útil?

Solução

Nós recentemente teve um problema semelhante com a nossa aplicação. A aplicação às vezes se conectar ao Oracle RAC e às vezes ele iria reclamar com ORA-12545. Em suma, o problema foi que o servidor tinha um nome real, enquanto nós estávamos usando endereços IP virtuais em TNSNAMES.ORA. Uma vez que nós adicionamos o mapeamento do nome do servidor para o endereço IP via system32 \ drivers \ tudo o arquivo etc \ hosts começou a trabalhar corretamente.

Eu escrevi um pouco mais no meu blog http://dcarapic.blogspot.com/ 2009/04 / intermitentes-ORA-12545-error.html

Outras dicas

Ah, tem que amar os problemas intermitentes :) (No seguinte, tive de substituir o caractere sublinhado como eu não sei o caractere de escape para essa linguagem wiki)

Você está sempre usando o mesmo usuário OS para se conectar e fazer o tnsping?

Verifique se há TNS variáveis ??de ambiente [sublinhado] ADMIN apontar para locais diferentes tnsnames.ora. Fazer uma varredura do cliente para tnsnames.ora duplicado; quer em locais apontado por $ TNS [sublinhado] Admin ou em diferentes $ ORACLE [sublinhado] Casas (por exemplo, se você tem 2 instalações de cliente Oracle).

Da mesma forma verificar se você está usando a mesma $ ORACLE [sublinhado] HOME e $ PATH variáveis ??de ambiente para todas as tentativas de conexão e tnsping. (Por exemplo, sempre o mesmo usuário OS ou cada usuário tem os mesmos valores)

Eu vejo que a saída tnsping relatórios versão 9.2 de modo que este não é provável, mas em 11g os registros de banco de dados com o ouvinte que pode demorar um minuto ou assim. (Talvez também verdadeiro com 10g). Tentativas de ligação antes de esta não vai encontrar o alvo.

Outra possibilidade improvável - é um serviço com o mesmo nome serviço ainda anunciado no servidor host de idade? Removê-lo, se possível.

Depois que eu iria começar a olhar para a própria rede. É um ping do servidor sempre bem sucedida e rápida? Se você estiver usando o nome do host em vez de IP no tnsnames.ora, faz o hostname resolver de forma confiável para o IP correto (nslookup). Existe um firewall local e se assim é que se comportando?

Saudações Karl

Se você estiver usando Oracle 10g, você pode usar um manipulador de Easy Connect vez:

//servername/instancename

,

//1.2.3.4/my.url.com

no seu caso.

Ele é imune a muitos de questões TNSNAMES.

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