Uma maneira bastante simples de visualizar o errorLog do SQL Server é executando a procedure xp_readerrolog pelo QA. Pórem, muitas vezes o Errolog pode ficar gigantesco, tornando inviável sua leitura ou fazendo com que você tenha que aguardar por vários minutos para então poder visualizar o log completo.
Diante deste problema e devido a minha necessidade de ficar lendo o errorlog constantemente, surgiu a procedure que disponibilizo nesta dica. Ela permite que você leia o errorLog do SQL Server filtrando apenas os eventos do dia corrente (deixando o parâmetro @STRn vazio), ou varrer o Errorlog (atual ou não) em busca de uma string específica. Por exemplo uma mensagem de erro.
A procedure possui doi parâmetros opcionais: @STRn e @ErrorlogN
Em @STRn você deve informar a string que deverá ser pesquisa. Quando deixado em branco é atribuído a ele a data atual e com isto é feito uma pesquisa por todos os eventos da data atual.
Em @ErrorlogN você deverá informar em qual errorlog você quer que seja feita a pesquisa. Por default o SQL Server guarda os últimos 6 errorlog no formato: ERRORLOG (Atual), ERRORLOG.1,…ERORLOG.6 sendo criado um a cada Stop/Start. Deixando este parâmetro em brando, a string informada no parâmetro @STRn será pesquisa no errorlog atual, caso contrário, será pesquisa no errorlog informado. Os valores possíveis são de 1 a 6.
Script da Procedure
USE PUBS
GO
CREATE PROC proc_leerrorlog
@STRn as VarChar(50)= ”,
@ErrorlogN as Char(1) = ”
AS
Declare @StrSQL as Varchar(100)
Declare @PATH_DATA as VarCHar(50)
Declare @sql_path NVARCHAR(260)
Declare @data_path NVARCHAR(260)
exec sp_MSget_setup_paths @sql_path output , @data_path output
If @STRn= ” — Se a string de pesquisa for ”, pega todos os eventos da data corrente.
Set @STRn= RTrim(Convert(varchar(10),GetDate(),120))
Set @StrSQL = ‘master..xp_cmdshell “findstr /I /N /C:’+ @STRn + ‘ ‘ +@data_path +’logerrorlog.’+ RTrim(@ErrorlogN)+'”‘
exec (@StrSQL)
GO
Exemplos de execução
— Filtra todos os eventos do dia atual no Log Atual
exec pubs..proc_leerrorlog
— Filtra todos os eventos do dia 14-10-2004 no log atual
exec pubs..proc_leerrorlog ‘2004-10-14’
output
——————————————————————————————-
94:2004-10-14 14:00:00.62 spid54 BackupDiskFile::OpenMedia: Backup device ‘W:BACKUP…
95:2004-10-14 14:04:46.87 spid54 Starting up database ‘pubs’.
96:2004-10-14 14:41:36.18 spid54 Starting up database ‘DB_XX’.
97:2004-10-14 14:41:36.23 spid54 Bypassing recovery for database ‘DB_XX’ because it is marked IN LOAD.
98:2004-10-14 14:41:36.97 spid54 Starting up database ‘NorthWind’.
99:2004-10-14 14:41:37.00 spid54 Bypassing recovery for database ‘NorthWind’ because it is marked IN LOAD.
100:2004-10-14 14:41:37.97 spid54 Recovery is checkpointing database ‘NorthWind’ (11)
101:2004-10-14 14:41:38.19 spid54 Starting up database ‘DB_XX’.
102:2004-10-14 14:41:38.57 spid54 Analysis of database ‘DB_XX’ (11) is 100% complete …
103:2004-10-14 14:41:38.92 backup Database restored: Database: DBODB_XX, creation date(time)…
104:2004-10-14 16:10:38.30 logon Login failed for user ‘SA’.
105:2004-10-14 16:10:43.20 logon Login failed for user ‘SA’.
NULL
(14 row(s) affected)
— Pesquisa pela string ‘Error: 15457’ no quinto error log
exec pubs..proc_leerrorlog ‘Error: 15457’,5
output
————————————————————————————————-
e:MSSQL$AlogERRORLOG.5:67:2004-10-01 13:02:59.56 spid52 Error: 15457, Severity: 0, State: 1
e:MSSQL$AlogERRORLOG.5:69:2004-10-01 13:02:59.81 spid52 Error: 15457, Severity: 0, State: 1
FINDSTR: Cannot open 15457
NULL
(4 row(s) affected)
Um abraço
Nilton Pinheiro

