Lendo o log de erro do SQL Server via T-SQL

Para ler o log de erro do SQL usando T-SQL basta acionar a stored procedure de sistema conforme abaixo:

EXEC sp_readerrorlog;
GO

Por padrão, essa SP lerá o arquivo corrente do log, que é o arquivo de número 0 (ou índice 0). Existem outros arquivos de log, que vão sendo arquivos com numerações maiores, como arquivo 1, arquivo 2, etc. Para listar os demais arquivos de log, usando T-SQL, faça:

EXEC sp_enumerrorlogs;
GO

O sql listará os demais arquivos existentes. Desta forma, sabendo que existe, por exemplo, um arquivo de log com índice 2, para visualizar o seu conteúdo basta executar:

EXEC sp_readerrorlog 2;
GO

É possível pesquisarmos o arquivo de log para encontrarmos, por exemplo, por ocorrências de erro, falhas, etc. Existem algumas maneiras de fazermos isso, mas a minha preferida é a de armazenar em uma tabela temporária o resultado da leitura do log pela sp_readerrorlog e, depois, efetuar as pesquisas que eu achar necessárias. Desta forma, disponibilizo abaixo uma stored procedure que faz exatamente isso. Ela possui dois parâmetros, que podem ser deixados com valores nulos. Neste caso, deixando os valores nulos, será retornado todo o conteúdo do log corrente. O primeiro parâmetro filtra por um texto; o segundo por uma data.

—– Cria procedure para acelerar o procedimento diário de leitura
ALTER PROCEDURE [dbo].[StpAnalisaLogError]
@FiltroTexto VARCHAR(50) = NULL, — Default nullo
@FiltroData VARCHAR(10) = NULL
AS
CREATE TABLE #Tabela
( LogDate DATETIME,
ProcessInfo VARCHAR(50),
Text VARCHAR(4000)
);

DECLARE @Data DATETIME = NULL;
IF @FiltroData IS NOT NULL
SET @Data = CONVERT(DATETIME,@FiltroData,103);

INSERT INTO #Tabela exec sp_readerrorlog;
SELECT * FROM #Tabela t
WHERE t.Text LIKE ‘%’ + ISNULL(@FiltroTexto,t.Text) + ‘%’
AND YEAR(t.LogDate) = YEAR( ISNULL(@Data,t.LogDate) )
AND MONTH(t.LogDate) = MONTH( ISNULL(@Data,t.LogDate) )
AND DAY(t.LogDate) = DAY( ISNULL(@Data,t.LogDate) )
ORDER BY t.LogDate DESC;

DROP TABLE #Tabela;
GO

— Exemplo de utilização
exec dbo.StpAnalisaLogError null, ’13/04/2010′
go
exec dbo.StpAnalisaLogError ‘erro’, ’13/04/2010′
go

Bom proveito.



Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s