Meu objetivo é detectar erros de tarefas de backup na tabela de monitoramento.
O problema é que há casos em que a instrução de backup retorna mais de um erro, então ERROR_MESSAGE() não é suficiente:
Msg 3201, Nível 16, Estado 1, Linha 1 Não é possível abrir o dispositivo de backup '...' Erro 3 do sistema operacional (O sistema não pode encontrar o caminho especificado.).
Msg 3013, Nível 16, Estado 1, Linha 1 BACKUP DATABASE está terminando de forma anormal.
Posso usar o throw para capturar as duas mensagens, mas existe uma maneira fácil de inserir a saída do throw na tabela ou superar esse problema de outra maneira?
Você pode aprimorar o tratamento de erros com eventos estendidos para superar a falha TRY...CATCH que está enfrentando. O padrão de design envolve estas etapas:
sqlserver.error_reported
eventos, filtrados principalmente por SPID.TRY
bloco.CATCH
bloco, leia os dados da sessão XEvents.Aqui está um exemplo que pode ser executado manualmente em um único lote do SSMS. Apenas certifique-se de substituir todas as ocorrências de "2016" no script pelo seu SPID.
Depois de executar o script, a saída do SSMS deve ser semelhante a esta:
Há muitas partes móveis lá. Mas você pode ser capaz de fazê-lo funcionar para você. Eu escrevi algumas postagens de blog relacionadas sobre TRY...CATCH que podem ser úteis:
A promessa não cumprida de TRY...CATCH
Tratamento de erros T-SQL aprimorado com eventos estendidos
Parte 2: Tratamento de erros de T-SQL aprimorado com eventos estendidos
No trabalho do SQL Agent que você usa para fazer backup de seus bancos de dados com dispositivos de backup, apenas faça com que cada etapa passe para a próxima etapa, com falha ou sucesso. No entanto, faça com que a última etapa tenha a lógica abaixo e diga a ela para relatar falha em falha e relatar sucesso em sucesso .
Isso enviará a você por e-mail os detalhes da falha das tabelas msdb para esse trabalho, como você veria na área do histórico de trabalhos do SQL Agent para os registros de data atuais. Você sempre pode verificar o histórico do SQL Agent manualmente quando receber a notificação por e-mail, mas isso funciona bem para a necessidade em que o configurei.
Tenho certeza de que você também pode usar a lógica e fazer algumas alterações para atender às suas necessidades. No meu caso, cada tarefa de backup para o dispositivo de backup é uma etapa separada, cada uma passando para a próxima etapa, independentemente dos resultados, e a última etapa é como indiquei acima e é suficiente para o monitoramento de falhas.
Se eu não estiver no escritório ou por conexão VPN, os dados da tabela HTML enviados por e-mail me darão uma ideia se isso precisa de atenção e assim por diante, verificando o Outlook Web Mail.
Consulta do DMason com alça spid: