Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como ler e gravar eventos no Event Viewer do Windows utilizando o CLR (C#)

Visualizações: 3.272 views
Tempo de Leitura: 5 minutos

Olá pessoal
Tudo bem?

Neste post, eu gostaria de mostrar a vocês como ler e gravar eventos no Visualizador de Eventos (Event Viewer) do Windows utilizando o CLR (C#). Para saber mais sobre o CLR, esse poderoso recurso que permite criar e executar códigos escritos utilizando a linguagem de programação C# e o .NET Framework para estender as funcionalidades do SQL Server, acesse o post Introdução ao SQL CLR (Common Language Runtime) no SQL Server.

Em muitas situações, ter essa informação disponível para consultas no banco de dados pode ser muito útil para criar monitoramentos internos ou para criar aplicações web que consomem essas informações e auxiliem a equipe de desenvolvimento a identificar problemas em aplicações e serviços, bem como permitir que se consiga gravar mensagens de evento personalizadas dentro de Stored Procedures do banco de dados SQL Server, de acordo com determinadas situações.

Um outro exemplo legal para esse post, é aqui na empresa em que eu trabalho, onde existe um serviço que fica monitorando o Event Viewer de um servidor, em busca de um evento onde a aplicação seja “XPTO” e o tipo seja “Error”. Quando é gerado um evento utilizando essa aplicação, uma equipe de monitoramento que trabalha no regime 24×7 faz o acionamento telefônico para um determinado número tomar as ações necessárias, especialmente para rotinas altamente críticas e que não podem falhar ou parar. Esse evento é gravado pelo CLR, quando uma determinada situação no banco de dados ocorre.

Como gravar eventos no Event Viewer pelo SQL Server

Para gravar eventos no Event Viewer do Windows pelo SQL Server, basta executar a Stored Procedure stpEvent_Viewer_Gravar da sua biblioteca CLR.

Parâmetros:

  • @Ds_Servidor: Nome do servidor que você quer gravar o evento
  • @Ds_Tipo_Evento: Tipo do evento que você deseja gravar (Error, FailureAudit, Warning, SuccessAudit, Success ou Information)
  • @Ds_Fonte: Nome que você quer definir como fonte do evento (Geralmente, o nome do sistema ou aplicação)
  • @Ds_Mensagem: Mensagem que você deseja gravar no evento
  • @Id_Evento: Código do erro ou mensagem que você quer gerar para este evento (livre escolha sua)

Visualizar código-fonte

Exemplo de utilização

Como gravar eventos no Event Viewer pelo SQL Server (Sem CLR)

É possível gravar eventos no Event Viewer pelo SQL Server sem utilizar o CLR? É sim, embora não seja uma forma tão “elegante”, uma vez que não é possível especificar a origem (Source) do evento.

Uma das formas de se fazer isso, é utilizando a opção “Write to the Windows Application event log” do SQL Agent:

A outra forma é utilizando a procedure não documentada xp_logevent, que eu já até havia publicado sobre ela no post As procedures estendidas não documentadas do SQL Server:

Exemplo de uso:

Como ler eventos no Event Viewer pelo SQL Server

Para ler eventos no Event Viewer do Windows pelo SQL Server, vou compartilhar duas formas de se atingir esse objetivo, uma utilizando uma Stored Procedure e outra utilizando uma Table-valued function, que nos dá mais flexibilidade para trabalhar com os dados.

Visualizar código-fonte da stpEvent_Viewer_Listar

Visualizar código-fonte da fncEvent_Viewer_Listar

Exemplos de utilização

Listando os eventos utilizando a SP

Listando os eventos utilizando a função

É isso aí, pessoal!
Espero que tenham gostado desse post e por favor, não confundam eventos do Event Viewer com eventos do log do SQL Server.. rs
Um abraço e até o próximo post.