ORA-12560: TNS:Protocol Adapter Error — Causas Reais e Como Resolver
- Siltech Consult
- 29 de jul.
- 3 min de leitura
O ORA-12560 costuma assustar por não vir acompanhado de nenhum detalhe adicional na tela — só "TNS:protocol adapter error" e mais nada. Diferente de erros como o ORA-12154, que apontam para uma falha específica de resolução de alias, o ORA-12560 é um erro genérico de baixo nível: o cliente Oracle não conseguiu nem estabelecer a comunicação inicial com a instância. Neste post reunimos as causas mais comuns (a maioria delas do lado do cliente, não do banco em si), o roteiro de diagnóstico e como corrigir.
O que o erro significa
Segundo a documentação oficial da Oracle, o ORA-12560 ("Database communication protocol error") indica que ocorreu um erro de baixo nível no protocolo de comunicação — pode ser causado por configuração incorreta de um parâmetro ADDRESS, ou por erros retornados pela interface de protocolo/sistema operacional subjacente. A própria documentação registra que, em alguns casos, a mesma condição de fundo que gera o ORA-12560 também aparece como TNS-00510, TNS-00519, TNS-12540/ORA-12540 ou TNS-12549/ORA-12549.
Na prática, isso significa que o ORA-12560 não é um erro de rede no sentido de "listener não escutando" ou "alias não resolvido" — ele costuma aparecer antes disso, tipicamente em conexões locais que não passam pelo listener (usando o protocolo bequeath/BEQ do Oracle Net).
Causas mais comuns
ORACLE_SID incorreto ou não definido: a variável de ambiente aponta para uma instância que não existe ou tem erro de digitação.
Instância não está no ar: o processo da instância (pmon) não está rodando no servidor.
No Windows, o serviço OracleService<SID> parado: sem esse serviço ativo, uma conexão local (bequeath) falha com esse erro — este é o cenário mais reportado em ambientes Windows, inclusive documentado pela própria Oracle Support.
No Windows, o serviço de listener (Oracle<nome_do_home>TNSListener) parado: relevante quando a conexão depende do listener, não de bequeath.
ORACLE_HOME inconsistente com o ORACLE_SID: comum em servidores com múltiplas instalações de client ou de banco, onde a sessão acaba resolvendo um home diferente do esperado.
Diagnóstico passo a passo
Em Windows
1. Confirmar o SID configurado na sessão:
echo %ORACLE_SID%
2. Verificar se o serviço da instância está ativo:
sc query OracleService<SID>
3. Se estiver parado, iniciar:
net start OracleService<SID>
4. Se a conexão depender do listener, verificar o serviço correspondente:
sc query Oracle<nome_do_home>TNSListener
Em Linux/Unix
1. Confirmar o SID configurado na sessão:
echo $ORACLE_SID
2. Confirmar que o processo da instância está de fato ativo (procurando por um processo ora_pmon_<SID> correspondente):
ps -ef | grep pmon
3. Conferir o registro da instância no oratab:
cat /etc/oratab
4. Se a conexão passar pelo listener, checar o status:
lsnrctl status
Em qualquer um dos dois ambientes, vale isolar o problema testando uma conexão simples (sqlplus / as sysdba localmente, sem string de conexão) antes de assumir que é um problema de rede — isso ajuda a confirmar se o erro está na camada local (SID/serviço/instância) antes de investigar listener ou tnsnames.
Correção
Na maioria dos casos, a correção é uma destas:
Corrigir o valor de ORACLE_SID para o nome exato da instância.
Iniciar o serviço (OracleService<SID> no Windows) ou a instância (startup via SQL*Plus, no servidor correto) quando ela estiver de fato parada.
Corrigir o ORACLE_HOME usado pela sessão, garantindo que corresponda à instalação onde a instância desejada está registrada.
Se nada disso resolver, seguir a recomendação da própria Oracle: habilitar o trace de rede (Oracle Net tracing), reproduzir a operação e revisar a pilha de erro em busca de uma causa de nível mais baixo antes de escalar para o suporte Oracle.
Fechamento
O ORA-12560 é um erro simples de resolver na maioria das vezes, mas o formato genérico da mensagem confunde muita gente e leva a diagnósticos por tentativa e erro — reiniciar serviços aleatoriamente, recriar tnsnames sem necessidade, ou assumir problema de rede quando o problema é local. É esse tipo de situação, com ambiente padronizado e documentado, que evita minutos (ou horas) de troubleshooting às cegas.
Precisa de suporte para diagnosticar erros de conectividade Oracle no seu ambiente?
Fale com a nossa equipe — contato: contato@siltechconsult.com.br — www.siltechconsult.com.br

Comentários