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


Nous avons deux options:
- Déplacer les fichiers
- 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#
#
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
Si en mode FULL, change-le temporairement en SIMPLE
Tronque le log
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
-- 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