DBCA falhando com "oracle.net.TNSAddress.Description.toString(Unknown Source)"

This post is also available in: English

Durante alguns dias, quando eu estava testando e criando a integração dos meus bancos de dados Oracle com o OUD 11.1.2.2.0  (OUD-EUS integration), recebi o erro abaixo:

DBCA error

No arquivo de trace gerado pelo dbca na pasta "cfgtoollogs/dbca", encontrei:

java.lang.NullPointerException
        at oracle.net.TNSAddress.Description.toString(Unknown Source)
        at java.lang.String.valueOf(String.java:2615)
        at java.util.AbstractCollection.toString(AbstractCollection.java:454)
        at java.util.Vector.toString(Vector.java:946)
        at java.lang.String.valueOf(String.java:2615)
        at java.lang.StringBuilder.append(StringBuilder.java:116)
        at oracle.sysman.assistants.util.NetworkUtils.registerDBWithDirSrvc(NetworkUtils.java:1917)
        at oracle.sysman.assistants.util.NetworkUtils.registerDBWithDirSrvc(NetworkUtils.java:1833)
        at oracle.sysman.assistants.util.step.network.DirServiceStep.executeImpl(DirServiceStep.java:248)
        at oracle.sysman.assistants.util.step.BasicStep.execute(BasicStep.java:210)
        at oracle.sysman.assistants.util.step.BasicStep.callStep(BasicStep.java:251)
        at oracle.sysman.assistants.dbca.backend.PreDBConfigureStep.executeImpl(PreDBConfigureStep.java:265)
        at oracle.sysman.assistants.util.step.BasicStep.execute(BasicStep.java:210)
        at oracle.sysman.assistants.util.step.Step.execute(Step.java:140)
        at oracle.sysman.assistants.util.step.StepContext$ModeRunner.run(StepContext.java:2711)
        at java.lang.Thread.run(Thread.java:637)
[Thread-32] [ 2015-04-06 11:12:11.380 BRT ] [SQLEngine.done:2189]  Done called

Tentei alguns workarounds da Oracle, como:

Porém nenhum deles funcionou ou me deu qualquer pista do que estava acontecendo.

Eu sabia que era um bug desde o início. Primeiro eu pensei que estava relacionado a algum problema ao detectar o OCR home já que aparecia em algumas linhas antes do log:

PRCT-1011 : Failed to run "getcrshome". Detailed error: []

Mas esse não era o problema. Mais tarde, eu pensei que estava relacionado de alguma forma com o SSLv3 por causa de algumas outras entradas no trace:

[Thread-32] [ 2015-04-06 18:56:42.823 BRT ] [NetworkUtils.bindToDirSrvc:1478]  NNFL_AUTH_SSL_NOAUTH failed
oracle.net.config.ConfigException: TNS-04409: Directory service error
  caused by: oracle.net.config.DirectoryServiceException: TNS-04427: DirectoryService: could not connect
  caused by: oracle.net.ldap.NNFLException
oracle.net.config.DirectoryServiceException: TNS-04427: DirectoryService: could not connect
  caused by: oracle.net.ldap.NNFLException
oracle.net.ldap.NNFLException
        at oracle.net.config.DirectoryService.throwException(Unknown Source)
        at oracle.net.config.DirectoryService.getNNFLWrapperRNE(Unknown Source)
        at oracle.net.config.DirectoryService.getNNFLWrapper(Unknown Source)
        at oracle.net.config.DirectoryService.bind(Unknown Source)
        at oracle.net.config.Config.bind(Unknown Source)
        at oracle.sysman.assistants.util.NetworkUtils.bindToDirSrvc(NetworkUtils.java:1471)
        at oracle.sysman.assistants.util.step.StepContext.doDirServiceBind(StepContext.java:1239)
        at oracle.sysman.assistants.util.step.StepContext.doDirServiceBind(StepContext.java:1224)
        at oracle.sysman.assistants.util.step.network.DirServiceStep.executeImpl(DirServiceStep.java:227)
        at oracle.sysman.assistants.util.step.BasicStep.execute(BasicStep.java:210)
        at oracle.sysman.assistants.util.step.BasicStep.callStep(BasicStep.java:251)
        at oracle.sysman.assistants.dbca.backend.PreDBConfigureStep.executeImpl(PreDBConfigureStep.java:265)
        at oracle.sysman.assistants.util.step.BasicStep.execute(BasicStep.java:210)
        at oracle.sysman.assistants.util.step.Step.execute(Step.java:140)
        at oracle.sysman.assistants.util.step.StepContext$ModeRunner.run(StepContext.java:2711)
        at java.lang.Thread.run(Thread.java:637)

Esse também não foi o motivo. Esta mensagem SSLv3 era apenas mais uma exceção não tratada .. as linhas posteriores mostraram que o dbca tentou uma outra abordagem.

Então, finalmente, depois de comparar alguns bancos de dados que funcionaram com outros que estavam recebendo exatamente o mesmo erro, percebi que a falha foi causada somente em BDs com listeners dinâmicos.

Todos os bancos de dados que foram configurados com um listener dinâmico, usando o host e porta padrões, sem o listener ter ser indicado no listener.ora, eu tive os mesmos problemas.

Como workaround, eu inseri no arquivo listener.ora:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myhostname)(PORT = 1521))
    )
  )

Em seguida, depois de reiniciar o listener e chamar o dbca novamente, tudo funcionou.

10 dias .. experiências, tentativas e cansaço. Isso é o que me custou o bug acima.

Gostou? Não deixe de comentar ou deixar um 👍!

Deixe um comentário

Seu e-mail não será publicado.