Wykonanie czynności na wszystkich errorlogach (przeszukanie wszystkich logów)

27-Sty-2014

W poprzednim wpisie pokazałem jak przeszukać errorlog w poszukiwaniu pewnego słowa. Error log poddlega roll over, więc np. po restarcie SQL powstaje nowy plik, a porzprzedni jest przekopiowywany na nazwę z nr 1, ten z nr 1 na 2 itd.

Oto skrypt, który wyszuka wskazanych słów we WSZYSTKICH logach:

–Kto wylaczył trace – informacja zapisana w error logu

DECLARE @word1 NVARCHAR(100)
DECLARE @word2 NVARCHAR(100)
 
SET @word1 = ‚trace’
SET @word2 = ‚error’ –ewentualnie wpisz error itp
 
–tabelka pomocnicza – iterujemy przez wszystkie errorlogi, trzeba ustalić ich liczbe
DECLARE @FileList AS TABLE (
subdirectory NVARCHAR(4000) NOT NULL ,
DEPTH BIGINT NOT NULL ,
[FILE] BIGINT NOT NULL);
 
DECLARE @ErrorLog NVARCHAR(4000), @ErrorLogPath NVARCHAR(4000);
 
–Ustalenie sciezki do katalogu z ERRORLOGiem
SELECT @ErrorLog = CAST(SERVERPROPERTY(N’errorlogfilename’) AS NVARCHAR(4000));
SELECT @ErrorLogPath = SUBSTRING(@ErrorLog, 1, LEN(@ErrorLog) – CHARINDEX(N’\’, REVERSE(@ErrorLog))) + N’\’;
 
–wylistowanie katalogu
INSERT INTO @FileList
EXEC xp_dirtree @ErrorLogPath, 0, 1;
–wyliczyć maksymalny numer loga
DECLARE @NumberOfLogfiles INT;
SET @NumberOfLogfiles = (SELECT COUNT(*) FROM @FileList WHERE [@FileList].subdirectory LIKE N’ERRORLOG%’);
 
–Przeszukac error log
DECLARE @i INT
SET @i=0
WHILE (@i< @NumberOfLogfiles)
BEGIN
EXEC Xp_readerrorlog @i, 1, @word1, @word2
SET @i=@i+1
END

 Pomysł z http://ask.sqlservercentral.com/questions/99484/number-of-error-log-files.html

Dodaj komentarz:

Autor: Rafał Kraik