terça-feira, 24 de maio de 2016

Monitoring - Notificação em casos de restart do servidor SQL SERVER

bom dia pessoal, desculpem pelo intervalo de postagem devido aproblemas profissionais,
entretando agora teremos um pouco a mais de tempo para blog e duvida dos usuarios.

Tempos gostaria de demonstrar como criar uma notificação de quando a sua instância (serviço)
for reiniciada ou acontecer um faillover (falha); um assunto crítico bem especulado, e porem longo.

Quando administramos muitas instâncias, pode ocorrer alguns eventos como um restart de uma instância ou um faillover e acabar passando despercebido pelos admins, e derrubando todos os acessos momentaneamente, por isso, toda vez que ocorre um destes eventos inexperados criaremos uma notificação por email para posteriormente analisar o que realmente ocorreu;

GO
SELECT servicename, startup_type_desc, status_desc, last_startup_time
FROM sys.dm_server_services

Esta notificação do evento será executada atraves de um job que é executado toda vez em que o SQL agent for iniciado (reiniciado), enviaremos um e-mail notificando que houve um evento no services, identificando qual a instância foi reiniciada.

-- inicio script 
DECLARE
    @msg NVARCHAR(MAX),
    @instancia VARCHAR(100),
    @assunto VARCHAR(100);

SELECT
       @instancia = @@SERVERNAME;
SET @assunto = 'A instancia ' + @instancia + ' Foi reiniciada';
SET @msg = '<p> ' + @instancia + ' A Instancia foi reniciada.</p>';

SET @msg = @msg + '<table border="2" cellspacing="2" cellpadding="2">';

SET @msg = @msg + '<tbody align="left" style="font-family:Arial; font-size: 11;" 
                   <TR><TH>Service Name</TH><TH>Startup Type</TH><TH>Status</TH>
                   <TH>Startup Time</TH></TR></tbody>';

SELECT
    @msg = @msg + '<tbody align="left" style="font-family:Arial;
                    font-size: 11;" <TR><TD>' + servicename + '</TD><TD>' 
          + startup_type_desc + '</TD><TD>' + status_desc 
                   + '</TD><TD>'+ CAST(last_startup_time AS VARCHAR(30))
                   + '</TD></TR></tbody>'
FROM
    sys.dm_server_services;
EXEC 
    msdb.dbo.sp_send_dbmail
    @profile_name = 'MSSQLSERVER',  
    @recipients = 'email_destino@email.com',
    @subject = @assunto, 
    @body = @msg, 

    @body_format = 'HTML';

-- fim script

Para criar o job basta expandir o SQL agent, e na guia steps colamos o script acima; Na guia schedules optamos por  “Start automatically when SQL Server Agent starts”

















Feito, quando ocorrer algum restart receberemos um e-mail (semelhante a este)
no destinario configurado e seus respectivos database;











Para criar um notificação em caso de failover, é um procedimento um pouco diferente,
consideramos mais complexo para isso precisamos de um futuro topico detalhando cada passo;

acompanhem o blog na proxima semana o script para monitoramento de failover;
Duvidas, problemas, e melhorias no email particular gudamatto@gmail.com

Grande abraços, sucesso ;)


Para criar este monitoramento usamos a sys.dm_server_services, 
para mais informações complemente a leitura em (https://msdn.microsoft.com/pt-br/library/hh204542%28v=sql.120%29.aspx)

Nenhum comentário:

Postar um comentário