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:
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í:
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 🙂
CARA… VC SALVOU A VIDA!! VALEU DEMAIS
Daora ler esse tipo de resposta, já valeu o post, valeu pelo retorno!