SQL Server’da Agent Hata Log’larını Listelemek

Herkese merhaba,

Bu yazıda SQL Server’da Agent hata Log’larını listelemek ilgili bilgi vermeye çalışacağım.

SQL Server’da bazı durumlarda Agent hata Log’larını listelemek isteyebilirsiniz. Aşağıdaki TSQL kodları, mevcut tüm SQL Server Hata Loglarını veya SQL Server Agent Hata Loglarında arama yapacaktır. İlk sonuç listesinde ikinci aramak istediğiniz şeyi arayarak sonuç kümesini daraltabilirsiniz de.

Aşağıdaki kodu kullanarak siz de bu işlemi rahatlıkla yapabilirsiniz.

/*============================================================================

@logFileType= SQL Server Hata Logları için 1, SQL Server Agent Hata Logları için 2
@searchString1 = Aranacak hata kelimesi kelime
@searchString2 = @searchString1 arama sonuçlarını da filtrelemek için
@start = Arama başlangıç tarihi, 
@end   = Arama bitiş tarihi,
@sortOrder = varsayılan olarak artan olarak ayarlı, azalan şeklinde göstermek ihtiyacınız varsa 'desc' kullanın.

============================================================================*/

DECLARE @logFileType SMALLINT = 1; --SQL Server Hata Logları için 1, SQL Server Agent Hata Logları için 2 
DECLARE @searchString1 NVARCHAR(256) = N'requests taking longer than 15 seconds to complete'; --NULL yazarsanız her hatayı gösterir
DECLARE @searchString2 NVARCHAR(256) = NULL; --NULL 
DECLARE @start DATETIME = NULL; --'2017-08-05 09:37'  --Arama başlangıç tarihi
DECLARE @end DATETIME = NULL; --'2017-08-05 10:37'    --Arama bitiş tarihi
DECLARE @sortOrder NVARCHAR(4) = N'desc'; --or N'asc'
DECLARE @logno INT = 0;
DECLARE @ErrorLog NVARCHAR(4000);
DECLARE @ErrorLogPath NVARCHAR(4000);
DECLARE @NumberOfLogfiles INT;

DECLARE @FileList AS TABLE
(
    subdirectory NVARCHAR(4000) NOT NULL,
    DEPTH BIGINT NOT NULL,
    [FILE] BIGINT NOT NULL
);

IF OBJECT_ID('tempdb..#errorlog') IS NOT NULL
    DROP TABLE #errorlog;

CREATE TABLE #errorLog
(
    LogDate DATETIME,
    PrcessInfo VARCHAR(20),
    [Text] NVARCHAR(4000)
);

SELECT @ErrorLog = CAST(SERVERPROPERTY(N'errorlogfilename') AS NVARCHAR(4000));
SELECT @ErrorLogPath = SUBSTRING(@ErrorLog, 1, LEN(@ErrorLog) - CHARINDEX(N'\', REVERSE(@ErrorLog))) + N'\';

INSERT INTO @FileList
EXEC xp_dirtree @ErrorLogPath, 0, 1;

IF (@logFileType = 1) --SQL Server Error Log
BEGIN
    SET @NumberOfLogfiles =
    (
        SELECT COUNT(*)
        FROM @FileList
        WHERE [@FileList].subdirectory LIKE N'ERRORLOG%'
    );
END;
ELSE 
BEGIN
    SET @NumberOfLogfiles =
    (
        SELECT COUNT(*)
        FROM @FileList
        WHERE [@FileList].subdirectory LIKE N'SQLAGENT%'
    );
END;

WHILE (@logno < @NumberOfLogfiles)
BEGIN
    INSERT INTO #errorLog
    EXEC master.dbo.xp_readerrorlog @logno,
                                    @logFileType,
                                    @searchString1,
                                    @searchString2,
                                    @start,
                                    @end,
                                    NULL;
    SET @logno = @logno + 1;
END;

SELECT *
FROM #errorLog
ORDER BY CASE
             WHEN @sortOrder = 'desc' THEN
                 LogDate
         END DESC,
         CASE
             WHEN @sortOrder = 'asc' THEN
                 LogDate
         END;

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

242 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!