Preskočiť na obsah
Skript

Error log s filtrom

Načíta SQL Server alebo SQL Agent error log (aktuálny aj staršie), voliteľne filtruje text a skryje bežný šum (úspešné zálohy, CHECKDB bez chýb, prihlásenia). Plus prehľad čísel chýb.

error-log-s-filtrom.sql 51 riadkov · T-SQL
Parametre skriptu doplň a kopíruj hotový skript
/* DeadlockCafe | Error log s filtrom
   Účel:  Načíta SQL Server alebo SQL Agent error log (aktuálny aj staršie), voliteľne filtruje text a skryje bežný šum (úspešné zálohy, CHECKDB bez chýb, prihlásenia). Plus prehľad čísel chýb.
   Režim: READ ONLY | SQL Server 2016 – 2022, on-premises
*/
SET NOCOUNT ON;

DECLARE @LogNumber int            = {{LogNumber:0|Číslo logu: 0 = aktuálny, 1 = predošlý…}};
DECLARE @LogType   int            = {{LogType:1|1 = SQL Server, 2 = SQL Agent}};
DECLARE @Search    nvarchar(4000) = N'{{Search:*|Hľadaný text, * = bez filtra}}';
DECLARE @HideNoise bit            = {{HideNoise:1|1 = skryť bežné hlášky, 0 = zobraziť všetko}};

IF @Search = N'*' SET @Search = NULL;

IF OBJECT_ID(N'tempdb..#log') IS NOT NULL DROP TABLE #log;
CREATE TABLE #log
(
    id           int IDENTITY(1,1) PRIMARY KEY,
    log_date     datetime       NULL,
    process_info nvarchar(100)  NULL,   -- pri Agent logu: ErrorLevel
    message      nvarchar(max)  NULL
);

INSERT INTO #log (log_date, process_info, message)
EXEC sys.sp_readerrorlog @LogNumber, @LogType, @Search;

-- 1) riadky logu
SELECT l.log_date, l.process_info, l.message
FROM #log AS l
WHERE @HideNoise = 0
   OR NOT (   l.message LIKE N'Log was backed up%'
           OR l.message LIKE N'Database backed up%'
           OR l.message LIKE N'Database differential changes were backed up%'
           OR l.message LIKE N'BACKUP DATABASE successfully%'
           OR l.message LIKE N'BACKUP DATABASE WITH DIFFERENTIAL successfully%'
           OR l.message LIKE N'BACKUP LOG successfully%'
           OR l.message LIKE N'DBCC CHECKDB (%found 0 errors and repaired 0 errors%'
           OR l.message LIKE N'Login succeeded%'
           OR l.message LIKE N'This instance of SQL Server has been using a process ID%'
           OR l.message LIKE N'Setting database option%')
ORDER BY l.log_date DESC, l.id DESC;

-- 2) ktoré chyby sa opakujú
SELECT TRY_CONVERT(int, SUBSTRING(l.message, 8, CHARINDEX(N',', l.message) - 8)) AS error_number,
       COUNT(*)        AS occurrences,
       MIN(l.log_date) AS first_seen,
       MAX(l.log_date) AS last_seen
FROM #log AS l
WHERE l.message LIKE N'Error: %,%'
GROUP BY TRY_CONVERT(int, SUBSTRING(l.message, 8, CHARINDEX(N',', l.message) - 8))
ORDER BY occurrences DESC;
## Kedy použiť

Ranná kontrola, po reštarte, po incidente úložiska (823 / 824 / 825), pri chybách prihlásenia (18456) alebo keď hľadáš, kedy sa niečo stalo.

## Ako čítať výsledok

Prvá sada: riadky logu od najnovšieho. `HideNoise = 1` skryje bežné hlášky (zálohy, CHECKDB s 0 chybami, Login succeeded…). Druhá sada: koľkokrát sa v logu vyskytlo ktoré číslo chyby (`Error: 18456, Severity: 14…`) – rýchly prehľad, čo sa opakuje. Pri chybe 18456 hľadaj `State` v nasledujúcom riadku – hovorí presný dôvod zlyhania prihlásenia.

> [!WARNING]
> Veľký error log (bez pravidelného `sp_cycle_errorlog`) sa načítava dlho a zaťaží `tempdb`. `sys.sp_readerrorlog` je dokumentovaná, ale procedúra `xp_readerrorlog`, ktorú volá, nie. Čísla logov (0, 1, 2…) sa pri každom recykle posúvajú. Pre SQL Agent log (`LogType = 2`) obsahuje druhý stĺpec úroveň chyby namiesto ProcessInfo.

**Oprávnenia:** SQL Server 2016–2019: člen `securityadmin` alebo `VIEW SERVER STATE`. SQL Server 2022: `securityadmin`, `VIEW ANY ERROR LOG` alebo `VIEW SERVER STATE`.  
**Režim:** READ ONLY · **Verzia:** SQL Server 2016 – 2022

## Súvisiace recepty

- [Suspect pages – evidované poškodené stránky](script.php?id=32&s=suspect-pages-evidovane-poskodene-stranky)
- [SQL Agent – joby, ktoré naposledy zlyhali](script.php?id=40&s=sql-agent-joby-ktore-naposledy-zlyhali)
- [CHECKDB našiel chybu – čo ďalej](script.php?id=61&s=checkdb-nasiel-chybu-co-dalej-823-824-825)

## Zdroje

- [sys.sp_readerrorlog](https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-readerrorlog-transact-sql)

_Skript je staticky overený proti dokumentácii Microsoft Learn (názvy DMV, stĺpcov a hodnôt), nie spustený na živom serveri. Pred použitím na PROD ho vyskúšaj na TEST._