ORA-12154
Não resolveu o identificador de conexão
O ORA-12154 é, provavelmente, o erro mais comum na vida de quem trabalha com Oracle — e também um dos mais mal interpretados. A mensagem completa costuma ser “TNS:could not resolve the connect identifier specified”.
O ponto mais importante: este é um erro do lado do cliente. O banco de dados nunca chegou a receber a sua tentativa de conexão. Não adianta reiniciar a instância, checar o listener ou olhar o alert log — nada disso está envolvido. O que aconteceu foi que a máquina que tentou conectar não conseguiu traduzir o nome que você usou (o “connect identifier”) em um endereço de servidor.
Na prática, o cliente Oracle procurou aquele alias em algum lugar (normalmente o arquivo tnsnames.ora) e não encontrou — ou encontrou um arquivo com erro de sintaxe.
O que significa
Erro DO CLIENTE: o alias não foi achado no tnsnames.ora (ou LDAP) que o cliente usa — TNS_ADMIN errado, alias com typo, sintaxe quebrada.
Como o erro aparece
ERROR: ORA-12154: TNS:could not resolve the connect identifier specified
Passo a passo do diagnóstico consultas somente leitura
Descubra qual tnsnames.ora o cliente está lendo de verdade
Costuma ser o passo que resolve o caso. É comum existirem vários arquivos tnsnames.ora na máquina (um por Oracle Home, um do cliente, um do aplicativo) e o programa estar lendo um diferente do que você está editando. A variável TNS_ADMIN é quem determina o caminho usado.
Verifique a variável de ambiente
echo $TNS_ADMIN # Linux/Unix echo %TNS_ADMIN% # Windows
Teste a resolução do alias
tnsping MEU_ALIAS
Isole o problema com EZConnect
Se a conexão abaixo funcionar, está provado que o banco, o listener e a rede estão bem — o problema é só de resolução de nome no cliente:
Conexão direta, sem usar tnsnames
sqlplus usuario/senha@//servidor:1521/nome_do_servico
Confira a sintaxe do tnsnames.ora
Erros clássicos: parênteses desbalanceados, alias com espaço antes do nome, uso de TAB em vez de espaço, ou um alias duplicado. Um único parêntese a mais invalida a entrada inteira — e às vezes as seguintes também.
Confira a ordem de resolução de nomes no sqlnet.ora
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
Ação imediata
Descubra QUAL tnsnames o cliente realmente lê (é quase sempre isso).
Correção definitiva
Corrigir alias/arquivo/variável; EZConnect elimina o tnsnames como suspeito.
Como prevenir
Padronizar TNS_ADMIN e distribuir tnsnames central.
Erros comuns — o que não fazer
- Reiniciar o banco de dados. É um reflexo comum, mas aqui não ajuda: o servidor não chega a participar deste erro. O risco é causar uma indisponibilidade sem resolver o problema.
- Editar o
tnsnames.oraerrado. Se a máquina tem mais de um Oracle Home, confirme o caminho comTNS_ADMINantes de sair alterando. - Esquecer que a aplicação pode rodar com outro usuário do sistema operacional — e portanto com outro ambiente e outro
TNS_ADMIN. Funcionar no seusqlplusnão garante que funcione no serviço da aplicação. - Confundir com o ORA-12514. Se o erro for 12514, a resolução funcionou e o listener respondeu — o problema é outro (serviço não registrado).
Perguntas frequentes
ORA-12154 é problema no servidor ou no cliente?
É no cliente. A mensagem indica que o software cliente não conseguiu resolver o identificador de conexão informado — a requisição sequer chegou ao servidor de banco de dados.
Qual a diferença entre ORA-12154 e ORA-12514?
No ORA-12154 o cliente não conseguiu sequer traduzir o alias em um endereço. No ORA-12514 o alias foi resolvido, o listener foi encontrado e respondeu — mas ele não conhece o serviço solicitado.
Preciso reiniciar o banco para corrigir ORA-12154?
Não. Reiniciar o banco não tem efeito sobre este erro, porque ele ocorre inteiramente no lado do cliente, antes de qualquer contato com o servidor.