Gérer les fichiers de log de SQL Server

@joekakone

Joseph Konka @joekakone

03/03/2026 · 3 min

Dans SQL Server, la taille des fichiers de log et de bases de données peut grandir très vite, ce qui peut causer un problème d'espace de stockage. Dans ce tutoriel, je vous montre comment gérer les fichiers de log et de bases de données dans SQL Server.

Le disque C de votre machine est preque plein. SQL Server y est pour quelque chose.

Nous avons deux options:

  1. Déplacer les fichiers
  2. Réduire la taille des fichiers

Arrêter SQL Server#

Nous allons d'abord arrêter SQL Server avant de copier/déplacer les fichiers.

Option 1 : Déplacer les fichiers de log de SQL Server#

Rendez-vous dans le dossier C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA. Puis Copiez et collez les fichiers dans le nouvel emplacement D:\MSSQL\DATA\pour mon cas.

Modifier les métadonnés#

SELECT name, physical_name 
FROM sys.master_files 
WHERE database_id = DB_ID('datamart');

#

ALTER DATABASE datamart
SET OFFLINE WITH ROLLBACK IMMEDIATE;


ALTER DATABASE datamart
MODIFY FILE (NAME = 'datamart', FILENAME = 'D:\MSSQL\DATA\datamart.mdf');

ALTER DATABASE datamart
MODIFY FILE (NAME = 'datamart_log', FILENAME = 'D:\MSSQL\DATA\datamart_log.ldf');


ALTER DATABASE datamart 
SET ONLINE;

Option 2 : Réduire la taille des fichiers#

La première chose est vérifier le mode de récupération

SELECT name, recovery_model_desc 
FROM sys.databases 
WHERE name = 'datamart';

Si en mode FULL, change-le temporairement en SIMPLE

USE datamart;
GO
ALTER DATABASE datamart SET RECOVERY SIMPLE;

Tronque le log

DBCC SHRINKFILE(datamart_log, 100);

100 = taille cible en Mo (mets ce que tu veux selon l'espace que tu veux libérer)

Vérifions la taille actuelle du fichier de logs

USE datamart;
GO
EXEC sp_helpfile;

-- 1. Compression au niveau de la LIGNE (ROW)
-- Idéal pour réduire l'espace sans trop d'impact CPU.
ALTER TABLE MaTable 
REBUILD WITH (DATA_COMPRESSION = ROW);

-- 2. Compression au niveau de la PAGE (PAGE)
-- Offre le meilleur taux de compression (inclut la compression ROW + Prefix + Dictionary).
-- Recommandé pour les grosses tables de données historiques.
ALTER TABLE MaTable 
REBUILD WITH (DATA_COMPRESSION = PAGE);

-- 3. Appliquer la compression sur un INDEX spécifique
ALTER INDEX MonIndex_Nom ON MaTable 
REBUILD WITH (DATA_COMPRESSION = PAGE);

-- 4. Pour les tables partitionnées (appliquer à une partition spécifique)
ALTER TABLE MaTable 
REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);
-- =============================================
-- 1. GÉRER LA TAILLE DU LOG (LE RENDRE STABLE)
-- =============================================

-- Passer en mode de récupération SIMPLE 
-- (Le log ne grossira plus indéfiniment, il se "recycle" tout seul)
-- ATTENTION : Vous perdez la capacité de restauration à une "minute précise".
USE [master];
ALTER DATABASE [MaBaseDeDonnees] SET RECOVERY SIMPLE;

-- Réduire la taille actuelle du fichier de log (Shrink)
-- On cible le nom logique du fichier de log (souvent MaBase_Log)
USE [MaBaseDeDonnees];
DBCC SHRINKFILE (N'MaBase_Log', 10); -- Réduit à 10 Mo


-- =============================================
-- 2. COMPRESSER LES TABLES (GAIN D'ESPACE)
-- =============================================

-- Option A : Compression de LIGNE (ROW)
-- Peu d'impact CPU, gain d'espace modéré (environ 20-30%)
ALTER TABLE [MaTable] 
REBUILD WITH (DATA_COMPRESSION = ROW);

-- Option B : Compression de PAGE (PAGE)
-- Plus de CPU requis, gain d'espace fort (souvent > 50%)
-- Idéal pour les données historiques ou peu modifiées
ALTER TABLE [MaTable] 
REBUILD WITH (DATA_COMPRESSION = PAGE);

-- Option C : Compression COLUMNSTORE (ARCHIVE)
-- Uniquement pour les tables de type Columnstore (Data Warehouse)
-- Gain d'espace extrême (jusqu'à 90%)
-- ALTER TABLE [MaTable] REBUILD WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);


-- =============================================
-- 3. VÉRIFIER L'ESPACE UTILISÉ
-- =============================================

-- Vérifier la taille des fichiers (Data vs Log)
SELECT name, size*8/1024 AS SizeMB, max_size, growth FROM sys.database_files;

-- Vérifier l'espace utilisé par chaque table
EXEC sp_spaceused '[MaTable]';

J'espère que vous avez pu résoludre votre problème d'espace.

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue