Accueil / Ressources / Lire le journal d'erreurs SQL Server (tous les fichiers)

› Script SQL

Lire le journal SQL Server : parcourir tous les fichiers pour chercher un événement.

Le journal d'erreurs de SQL Server (ERRORLOG) est découpé en plusieurs fichiers, recyclés à chaque redémarrage du service. L'incident que vous cherchez est peut-être dans une archive. Ce script parcourt tous les fichiers disponibles et regroupe le résultat.


Les requêtes de cette page lisent des informations de l'instance sans modifier vos données. Les commandes qui modifient quelque chose sont signalées dans le texte. Testez toujours sur un environnement non critique avant la production, et relisez chaque requête avant de l'exécuter.

Le script

Il s'appuie sur la procédure xp_readerrorlog, non documentée par Microsoft mais très utilisée. Les deux chaînes de recherche sont combinées par un ET : une ligne doit contenir les deux. Laissez-en une vide si une seule suffit.

T-SQL
-- Recherche d'un événement dans tous les fichiers du journal d'erreurs SQL Server
-- Droit requis : sysadmin (ou droits sur xp_readerrorlog).
SET NOCOUNT ON;

DECLARE @Recherche1 nvarchar(256) = N'Error: 823';      -- texte à trouver (NULL = tout)
DECLARE @Recherche2 nvarchar(256) = NULL;               -- second texte, combiné par ET
DECLARE @Debut      datetime      = NULL;               -- ex. '2026-11-01 00:00'
DECLARE @Fin        datetime      = NULL;               -- ex. '2026-11-05 23:59'
DECLARE @TypeLog    int           = 1;                  -- 1 = journal SQL Server, 2 = journal de l'Agent

CREATE TABLE #fichiers (archive int, date_fichier datetime, taille_octets bigint);
CREATE TABLE #log (
    archive      int NULL,
    date_log     datetime,
    process_info nvarchar(64),
    texte        nvarchar(max)
);

INSERT INTO #fichiers (archive, date_fichier, taille_octets)
EXEC master.dbo.sp_enumerrorlogs @TypeLog;

DECLARE @n int = 0, @max int = (SELECT MAX(archive) FROM #fichiers);

WHILE @n <= @max
BEGIN
    BEGIN TRY
        INSERT INTO #log (date_log, process_info, texte)
        EXEC master.dbo.xp_readerrorlog @n, @TypeLog, @Recherche1, @Recherche2, @Debut, @Fin, N'asc';

        UPDATE #log SET archive = @n WHERE archive IS NULL;
    END TRY
    BEGIN CATCH
        PRINT CONCAT('Fichier ', @n, ' illisible : ', ERROR_MESSAGE());
    END CATCH;
    SET @n += 1;
END;

SELECT archive AS fichier, date_log, process_info, texte
FROM #log
ORDER BY date_log, archive;

-- Nombre de fichiers disponibles et période couverte
SELECT COUNT(*) AS nb_fichiers, MIN(date_fichier) AS plus_ancien, MAX(date_fichier) AS plus_recent
FROM #fichiers;

DROP TABLE #log;
DROP TABLE #fichiers;

Recherches utiles

  • N'Error: 823', N'Error: 824', N'Error: 825' : erreurs d'entrées-sorties, signes de corruption ou de panne de stockage.
  • N'Login failed' : échecs de connexion. Avec une seconde chaîne, un nom de login ou une adresse IP.
  • N'I/O requests taking longer than 15 seconds' : lenteur du stockage.
  • N'deadlock' : interblocages enregistrés par un indicateur de trace.
  • N'Recovery of database' ou N'Starting up database' : redémarrages et récupérations.
  • N'BACKUP' avec N'failed' : échecs de sauvegarde.

Conseils

  • Par défaut, SQL Server garde 6 archives en plus du fichier courant. Pour garder plus d'historique, augmentez ce nombre (jusqu'à 99 dans SSMS, clic droit sur Gestion, Journaux SQL Server, Configurer).
  • Un redémarrage du service ou la procédure sp_cycle_errorlog ouvre un nouveau fichier. Planifier un cycle hebdomadaire évite des fichiers énormes, ce qui rend la lecture lente.
  • Le journal de l'Agent SQL Server se lit avec le même script en passant @TypeLog = 2.
  • Les erreurs graves figurent aussi dans le journal d'événements Windows, et dans la session d'événements étendus system_health.

Un incident, un audit, une question ?

Un premier échange suffit à cadrer l'urgence et le périmètre.

Demander une intervention