Parmi les options de configuration d’une base de données on trouve le mode de récupération qui peut être Complet (Full), Journalisé en bloc (Bulk-Logged) ou Simple (Simple).
Si le mode de récupération d’une base de données est différent du mode Simple, il faut impérativement mettre en place une stratégie de sauvegarde des fichiers journaux de cette base de données sinon les fichiers log n’arrêteront par de croitre et consommer de l’espace disque.
Au cas où vous avez oublié de mettre en place cette stratégie et que votre disque commence à souffrir il faut impérativement réduire la taille des fichiers journaux volumineux, cet article décrit l’ensemble des actions à entreprendre pour réaliser cette action.
Identifier le nom logique d’un fichier Log d’une base de données
Pour identifier le nom logique d’un fichier journal d’une base de données nommée Demo il suffit d’exécuter la requête suivante :
SELECT DB_NAME(database_id) AS [Base de données],name AS [Nom Logique] ,
physical_name AS [Nom Physique] FROM sys.master_files
WHERE DB_NAME(database_id) = 'Demo' AND type = 1
Noter le nom qui apparaît au niveau de la colonne Nom Logique
Sauvegarder la base de données et le fichier Log
Avant de procéder à la réduction de la taille du fichier log et afin de sécuriser l’opération il faut procéder à une sauvegarde de la base de données et du fichier journal pour pouvoir la récupérer en cas de problème.
Pour cela il suffit d’exécuter les scripts suivants :
BACKUP DATABASE [Demo]
TO DISK = N'F:\Backup\Demo.BAK'
WITH NOFORMAT, NOINIT,
NAME = N'Demo-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
BACKUP LOG [Demo]
TO DISK = N'F:\Backup\Demo.bak'
WITH NOFORMAT, NOINIT,
NAME = N'Demo-Transaction Log Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
Réduire la taille du fichier log de la base de données
On peut réduire la taille du fichier log en exécutant le script SQL Suivant
USE [Demo]
GO
DBCC SHRINKFILE (N'Demo_log' , 0, TRUNCATEONLY)
GO
Ou
En utilisant SQL Server Management Studio et en cliquant avec le bouton droit sur la base de données en question puis sur Tasks ==> Shrink ==> Files
Au niveau de la fenêtre Shrink file – Demo.log :
- Vérifier que le type de fichier est bien Log
- Cocher la case Reduce unused space
- Cliquer sur Ok
Si la taille du fichier Log n’est pas réduite suite à cette opération chose qui peut survenir si la fin du fichier log est considérée par SQL Server comme portion active non réductible, on peut forcer l’opération de réduction en changeant le mode de récupération de la base de données vers le mode simple, exécuter l’opération de troncature une autre fois et ensuite remettre le mode de récupération de la base de données au mode Complet (Full).
Pour changer le mode de récupération de la base vers le mode Simple exécuter le script suivant :
USE [master]
GO
ALTER DATABASE [Demo] SET RECOVERY SIMPLE WITH NO_WAIT
GO
Pour remettre le mode de récupération à Complet exécuter le script suivant :
USE [master]
GO
ALTER DATABASE [Demo] SET RECOVERY FULL WITH NO_WAIT
GO
Au niveau du script de la troncature on peut choisir la taille cible que doit prendre notre fichier log en utilisant la syntaxe suivante :
USE [Demo]
GO
DBCC SHRINKFILE (N'Demo_log' , <Taille Cible en MB>)
GO