Eu quero monitorar se meu sqlserver está ativo de uma máquina distante.
Atualmente, envio uma consulta simples "select @@version" com sqlcmd e, em seguida, valido se essa consulta retornou a parte esperada do texto:
sqlcmd -S np:\\<servername>\pipe\sql\query -i version.sql | findstr /I "expected string"
então prossigo para validar as condições com base neste evento.
Existe uma maneira melhor de monitorar eventos db up e eventos db down?
Obrigado
A melhor maneira (além de comprar um produto adequado) é fazer com o PowerShell, com o Invoke-SqlCmd, pois assim você terá mais flexibilidade para verificar a resposta e fazer algo com ela.
Eu provavelmente não confirmaria a versão porque não tem sentido e mudará quando você atualizar ou corrigir; Eu confirmaria que @@Servername corresponde ao que eu espero, caso o IP tenha se misturado de alguma forma.
Quanto às alternativas, elas não são realmente "melhores", mas você pode expandi-las o quanto quiser:
Você pode verificar o log de eventos para tentativas de conexão com falha. Só porque você pode se conectar não significa que o aplicativo crítico que usa uma conta AD que expirou quando não deveria, pode se conectar. Isso é realmente muito útil. Se você não está rastreando logins com falha, deve começar, seja o log de eventos, uma auditoria, um evento estendido ou um rastreamento padrão.
Todos os bancos de dados estão online/sincronizados? Só porque você pode se conectar ao mestre não significa que um dos discos não foi desconectado e fez com que o banco de dados entrasse no modo suspeito.
Você pode usar WMI/CIM para determinar se o serviço está em execução. Seu agente está em execução? É melhor que seja porque, caso contrário, seus backups e outros processos provavelmente irão parar. Você provavelmente vai querer usar o WMI/CIM para verificar isso.
Tecnicamente, você pode escrever um manipulador WMI que é injetado no servidor, o que pode acionar uma notificação por e-mail quando o serviço SQL para/inicia inesperadamente. Mas isso é complicado e eu não me incomodaria.
Você pode consultar os contadores de desempenho para recuperar logins/s para ver se ele caiu radicalmente da norma. Mas seria tão complicado identificar outliers que provavelmente não valeria a pena o esforço. Por outro lado, se aumentar para > 1000 por segundo (4 milhões por hora, graças a um software Oracle quebrado lendo do SQL!) Isso pode indicar um problema, então talvez você queira detectá-lo.