Lendo LOGS – SQL Server

Neste artigo irei mostrar um script simples para ler os Logs no SQL Server utilizando pârametros.

Atualmente a maneira mais prática e utilizada para leitura dos arquivos de Log no SQL Server é uma procedure própria do SQL Server:

Porém nesta procedure não é possível utilizar pârametros na busca, como por exemplo data ou Device.
No script a seguir, irei armazenar as informações que estão no LOG e a partir destas informações, poderá ser utilizado pârametros na busca:

USE Master
GO

If Exists(SELECT * FROM Sys.Procedures WHERE Name = N'PROC_ERROR_LOG' And Type = N'P')
DROP PROCEDURE PROC_ERROR_LOG

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

/*------------------------------------------------------------------------------------------------------*/
/* Exemplos:																							*/
/*	- Verificar os Logs dos últimos 60 minutos: PROC_ERROR_LOG 60, NULL, NULL, NULL, NULL, NULL			*/
/*	- Verificar os Logs SPID: PROC_ERROR_LOG NULL, NULL, NULL, 'SPID', NULL, NULL						*/
/*------------------------------------------------------------------------------------------------------*/

CREATE PROCEDURE PROC_ERROR_LOG
(
	/*------------------------------------------------------------------------------------------*/	
	/* Quantidade de minutos a retroagir na pesquisa.											*/
	/* O Default são 30 minutos.																*/
	/* Informe NULL para desconsiderar e não usar este parâmetro.								*/
	/*------------------------------------------------------------------------------------------*/
	 @MinutosRetroagir		int			= 30

	/*------------------------------------------------------------------------------------------*/
	/* Data inicial para a pesquisa no Log. Registros com datas menores serão desconsiderados	*/
	/* O Default é NULL.																		*/
	/* Informe NULL para desconsiderar e não usar este parâmetro.								*/
	/*------------------------------------------------------------------------------------------*/
	,@DataInicial			datetime	= NULL

	/*------------------------------------------------------------------------------------------*/
	/* Data final para a pesquisa no log. Registros com datas maiores serão desconsiderados.	*/
	/* O Default é NULL.																		*/
	/* Informe NULL para desconsiderar e não usar este parâmetro.								*/
	/*------------------------------------------------------------------------------------------*/
	,@DataFinal				datetime	= NULL

	/*------------------------------------------------------------------------------------------*/
	/* Texto a ser pesquisado dentro da coluna ProcessInfo do log.								*/
	/* Exemplo: Server, Backup, SPID, etc.														*/
	/* A pesquisa pelo texto é parcial (em qualquer parte).										*/
	/* O Default é NULL.																		*/
	/* Informe NULL para desconsiderar e não usar este parâmetro.								*/
	/*------------------------------------------------------------------------------------------*/
	,@Processo				varchar(50)	= NULL

	/*------------------------------------------------------------------------------------------*/
	/* Texto a ser pesquisado dentro da coluna Text do log.										*/
	/* Exemplo: error, starting, etc.															*/
	/* A pesquisa pelo texto é parcial (em qualquer parte).										*/
	/* O Default é NULL.																		*/
	/* Informe NULL para desconsiderar e não usar este parâmetro.								*/
	/*------------------------------------------------------------------------------------------*/
	,@Texto					varchar(100) = NULL

	/*------------------------------------------------------------------------------------------*/
	/* Filtra a pesquisa para exibir apenas o log do nome do servidor informado.				*/
	/* Use este parâmetro quando estiver pesquisando o log de vários servidores ao mesmo tempo.	*/
	/* O Default é NULL.																		*/
	/* Informe NULL para desconsiderar e não usar este parâmetro.								*/
	/*------------------------------------------------------------------------------------------*/
	,@NomeServidor			varchar(128) = NULL
)
AS
	SET NOCOUNT ON

	-- Tabela temporária que irá armazenar os dados dos Logs do SQL SERVER
	DECLARE @tbTmp TABLE
	(
		 ID			int		identity
		,Data		datetime
		,Processo	varchar(50)
		,Texto		varchar(4000)
	)

	-- Insere os dados na tabela temporária
	INSERT INTO @tbTmp(Data, Processo, Texto)
		EXEC SP_ReadErrorLog

	-- Efetua o SELECT de acordo com os parâmetros passado nas procedures
	SELECT
		*
	FROM
		@tbTmp
	WHERE
		Data >=
			Case When @MinutosRetroagir Is Not Null Then DateAdd(Minute, -@MinutosRetroagir, GetDate())
			Else Data End
	And	Data >= IsNull(@DataInicial, Data)
	And	Data <= IsNull(@DataFinal, Data)
	And Processo Like
			Case When @Processo Is Not Null Then '%' + @Processo + '%'
			Else Processo End
	And Texto Like
			Case When @Texto Is Not Null Then '%' + @Texto + '%'
			Else Texto End
	And	ServerProperty('ServerName') = 
			IsNull(@NomeServidor, Convert(varchar(128), ServerProperty('ServerName')))
	ORDER BY
		ID DESC

Fonte

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s