Error 22050 – Failed to initialize sqlcmd library with error number -2147467259. [SQLSTATE 42000]

Olá,

Tivemos o seguinte erro em um job recém implantado aqui na empresa que utiliza a feature Database Mail. Abaixo a tela do job em questão:

E22050_1

Messagem:

Executed as user: DOMINIO\SVC-CONTAETC. Failed to initialize sqlcmd library with error number -2147467259. [SQLSTATE 42000] (Error 22050).  The step failed.

Procurando maiores informações sobre esse erro nos mais decentes mecanismos de busca (não é o bing), localizei várias ocorrências dessa mesma mensagem onde a única coisa em comum era o uso do Database Mail, mas as causas do problema quase sempre eram diferentes. Pensando nisso, a melhor estratégia era identificar o erro raíz que estava gerando a “falha na inicialização na biblioteca do SQLCMD”.

Troubleshooting 

  • Profiler configurado, filtrando a conta do Agent e com o evento “User Error Message”. Pode ser Extended Events também. Não importa o meio de tracing, importante é conseguir resolver o problema.
  • Executar novamente o job problemático. Eu executei no mesmo ambiente porque já conheço o ambiente e o que o job faz, mas recomendo que faça isso em ambiente de não-produção.
  • Consultar o trace. Simples assim.

Básico, mas suficiente. Olha o erro raíz aí:

E22050_2

Erro:

Invalid object name ‘dbo.ResultQuery’.

Antes de falar sobre o erro, é interessante falar sobre o job em questão: ele prepara um resultset bem simples utilizando a tabela  dbo.ResultQuery, só que a lógica inteira do job acontece no banco BDABC e a query utilizada no Database Mail não especificava qual era a base, logo, o objeto era procurado na MASTER (onde ele realmente não existe). Abaixo o trecho de código com a referência inválida.

A forma de consertar isso foi trivial: colocar o nome da base antes do dbo e pronto. Job funcionando e sem erro 22050.

Logo podemos concluir que o que realmente importa neste caso, é o erro raíz, não a mensagem logada no SQL Agent. Lembra um pouco as “palas” que acontecem no DTC onde aparece que a transação foi abortada e no final das contas foi um erro totalmente away (tabela inválida, coluna inválida, pk duplicada, etc).


TL;DR: O erro  22050 não responde o motivo do erro. Analise o código, de preferência com Trace, Extended Events ou algo que possa te ajudar a localizar o erro original.


 

Até o próximo post 🙂

Leave a Comment

Your email address will not be published. Required fields are marked *