segunda-feira, 17 de outubro de 2016

Erro: Fatal NI connect error 12537


Ao verificarmos o arquivo alert.log do banco de dados, nos deparamos com uma seqüência contínua do erro "Fatal NI connect error 12537", conforme descrito abaixo:


$ tail -5000 alert.log


Fatal NI connect error 12537, connecting to:
 (description=(address=(protocol=tcp)(host=xxx.xxx.xx.xxx)(port=1555))(connect_data=(server=dedicated)(sid=banco)(CID=(PROGRAM=oracle)(HOST=DB_XPTO)(USER=oracle))))

  VERSION INFORMATION:
        TNS for IBM/AIX RISC System/6000: Version 12.1.0.2.0 - Production
        TCP/IP NT Protocol Adapter for IBM/AIX RISC System/6000: Version 12.1.0.2.0 - Production
        Oracle Bequeath NT Protocol Adapter for IBM/AIX RISC System/6000: Version 12.1.0.2.0 - Production
  Time: 7-SEP-2016 13:23:41
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12537
    
TNS-12537: TNS:connection closed
    ns secondary err code: 12560
    nt main err code: 507
    
TNS-00507: Connection closed
    nt secondary err code: 0
    nt OS err code: 0



Essa mensagem de erro tem, na maioria das vezes, relação com alguma alteração feita no firewall da rede e devido a isto, começam a aparecer essas mensagens no arquivo de log do banco de dados.

Após pesquisas feitas na internet, no site da Oracle (MOS) e a abertura de um chamado no próprio fornecedor (ORACLE), conseguimos eliminar essas mensagens de erro do arquivo alert.log com a inclusão dos parâmetros informados a seguir:


1) Arquivo sqlnet.ora

No arquivo sqlnet.ora, que fica em $ORACLE_HOME/network/admin, devemos adicionar o parâmetro:

DIAG_ADR_ENABLED = OFF


2) Arquivo listener.ora

No arquivo listener.ora, que fica em $ORACLE_HOME/network/admin, devemos adicionar o parâmetro:

DIAG_ADR_ENABLED_LISTENER = OFF


3) Reiniciar listener

Após a configuração é necessário reiniciar o listener do banco de dados.



Observação:

Se tivermos mais de um listerner configurado para o nosso banco de dados, devemos incluir no arquivo listener.ora uma entrada para cada listener.

Abaixo segue um exemplo de um ambiente com 3 listeners configurados.


$ ps -ef | grep lsnr

grid  9044142   1   0 12:06:52 -  0:00 /u01/app/12.1.0.2/grid/bin/tnslsnr LISTENER
grid 15400964  1   0 09:32:56 -  0:00 /u01/app/12.1.0.2/grid/bin/tnslsnr LISTENER_SCAN1
grid 20578432  1   0 09:33:10 -  0:00 /u01/app/12.1.0.2/grid/bin/tnslsnr LISTENER_SCAN2


Para esse ambiente, no arquivo listener.ora deveremos ter 3 entradas para a configuração que eliminará a mensagem de erro do arquivo alert.log, como demonstrado abaixo:


DIAG_ADR_ENABLED_LISTENER = OFF
DIAG_ADR_ENABLED_LISTENER_SCAN1 = OFF
DIAG_ADR_ENABLED_LISTENER_SCAN2 = OFF