Voici un script pour réduite la taille du journal des transactions
DECLARE @size INT;
SET @size = 10; --- Taille du log à la fin en MegaBytes
DECLARE @database VARCHAR(200);
SET @database = DB_NAME(); --- Obtient le nom de la base en cours
--- le shrink des logs
DECLARE @sqlShrink VARCHAR(MAX);
SET @sqlShrink = '
DECLARE @logfilename NVARCHAR(200);
USE [' + @database + '];
ALTER DATABASE ['+ @database +'] SET RECOVERY SIMPLE;
DECLARE crsor CURSOR FOR
SELECT [name] FROM [sys].[database_files]
WHERE [type] = 1;
OPEN crsor
FETCH crsor INTO @logfilename
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC SHRINKFILE (@logfilename, '+CONVERT(VARCHAR(20), @size)+');
FETCH crsor INTO @logfilename
END
CLOSE crsor
DEALLOCATE crsor
ALTER DATABASE [' + @database + '] SET RECOVERY FULL;
USE master;
';
EXEC (@sqlShrink);
Dans le principe :
1) On passe la base en cours dans le mode Recovery Simple
2) Pour chaque fichier de log (LDF) on fait un DBCC SHRINKFILE
3) On remet la base dans le mode Recovery Full
Il doit surement pouvoir être amélioré mais bon ça fait le job !
Merci aux auteurs initaux du script ;-)
Aucun commentaire:
Enregistrer un commentaire