Alertas do SQL Server Agent e erros de gravidade
Eu tenho alertas de configuração no SQL Agent para erros de nível de gravidade 15-16 para o ensaio, e descobriu que estes nem sempre são acionados
Para ser mais exato, estes parecem gatilho somente quando determinado número de erro tem is_event_logged = 1emsys.messages
Isso significa que quando os comandos abaixo são executados:
create table -- Msg 102, Level 15, State 1 -- Incorrect syntax near 'table'
select 1/0 -- Msg 8134, Level 16, State 1 -- Divide by zero error encountered
Esses erros (102, 8134) foram is_event_logged = 0e não são gravados no log do aplicativo -> alertas para erros de gravidade de nível 15-16 não disparam
Quando tento gerar a gravidade do erro 15 ou 16, que tem is_event_logged = 1, os alertas são disparados perfeitamente
raiserror(18054,16,1)
raiserror(15716,15,1)
O mesmo ocorre com os erros de gravidade 17-25, apenas aqueles que têm is_event_logged = 1, podem disparar um alerta
Questões:
Parece não ser o nível de gravidade do erro, mas na verdade a
is_event_loggedcoluna controla se o erro pode ou não acionar um alerta que procura erros de nível de gravidade. Este é o comportamento pretendido no SQL Server?Se eu precisar criar uma mensagem de erro personalizada como um alerta para um aplicativo, usando o
sp_addmessageprocedimento, e posteriormente configurar um Alerta para essa mensagem de erro, o parâmetro @severity realmente não importa, eu preciso usar o parâmetro @with_log?Existe alguma maneira de cometer TODOS os erros de determinados níveis de gravidade (15,16,17-25) para disparar um alerta, independentemente de is_event_logged ser igual a 1 ou 0? Tenho medo de perder algo importante, porque há muitos erros de gravidade 17-25 que não são registrados em app.log -> não disparar um e-mail de alerta?
Respostas
Sim, está funcionando conforme planejado.
Olhando para os documentos :
O SQL Server Agent lê o log do aplicativo e compara os eventos gravados nele com os alertas que você definiu.
O mecanismo usado para o alerta do SQL Agent é ler o log. Assim, se não estiver logado, não haverá alerta.
Em vez disso, você pode usar eventos estendidos para capturar erros, mesmo se eles não forem registrados. Você pode então escrever seu próprio processo para ler o arquivo Extended Events e enviar alertas conforme necessário.