Detectei que o SQLAgent não estava sendo executado em um de nossos servidores devido a um erro inesperado de vazamento de memória que causou o desligamento do SQL Agent. Não havia alertas configurados, portanto, um trabalho principal que deveria estar em execução não estava. Existe uma maneira de monitorar o SQL Agent do próprio SQL Server?
Eu fiz muitas pesquisas, mas não consigo encontrar uma maneira de fazer isso. Tudo o que encontrei muito sobre monitoramento de jobs, agendamentos, etc. Mas não como monitorar se o SQL Agent para de funcionar, não reinicia ou algo semelhante que impeça sua execução.
PS: Estou planejando fazer outra pergunta para o problema de vazamento de memória
O que você pode fazer é ter o script abaixo armazenado em seu servidor ou torná-lo um procedimento armazenado:
use abaixo com sqlcmd
O que você pode fazer para aliviar:
Sua única opção além de configurar um processo separado em outro servidor é configurar as ações de recuperação para o serviço específico . Isso é feito no lado do Windows, não no SQL Server. Algumas pessoas farão com que ele execute um arquivo de programa/lote que envie um e-mail ou outras coisas semelhantes. É com você.
No geral, se eu não tivesse monitoramento para lidar com isso, diria apenas para criar um pequeno script do PowerShell que apenas envia um e-mail se o serviço for encontrado em qualquer coisa, exceto em execução e executá-lo com uma tarefa agendada no servidor. Adicionar as opções de recuperação acima é apenas se o serviço for interrompido inesperadamente, não cobrirá se algum programa ou script for executado que o desliga normalmente sem o seu conhecimento.
A maneira mais difícil seria criar um evento estendido que observasse a atividade do SQL Agent (ele executa procedimentos armazenados periodicamente para verificar os trabalhos que precisam ser executados) e notificar se isso não acontecer. O problema é que você precisaria de algum tipo de recurso de execução agendada para executá-lo, que é o que você faz com o SQLAgent. E se você for usar, digamos, o agendador do Windows como um recurso de execução agendada, provavelmente é melhor apenas escrever algum powershell para ver se o serviço está em execução ou não.
A melhor maneira é provavelmente vincular-se a um sistema de monitoramento de serviço (PRTG, System Center, etc) e usá-lo para monitorar seus serviços. Usar um serviço para monitorar a si mesmo é um problema da galinha e do ovo.