- -- Procédure stockée permettant de tronquer le journal de logs de toutes les Bdd utilisateurs
- CREATE PROCEDURE SHRINKLOGS AS
- DECLARE
- @Name_DB varchar(100),
- @Name_Journal_Logs varchar(100),
- @Size_Journal_Logs integer,
- @Size_Journal_Logs_Max integer,
- @SQL varchar(500)
-
- -- Initialisation de la taille du journal de logs
- -- Si un journal de logs dépasse cette taille (en MB)
- -- il sera réduit à cette taille.
- SET @Size_Journal_Logs_Max = 128
-
- DECLARE CUR CURSOR FOR
- -- Recherche le nom des Bdd utilisateurs.
- SELECT name AS Name_DB
- FROM master.dbo.sysdatabases
- WHERE name NOT IN('master','msdb','model','tempdb','pubs')
- OPEN CUR
- FETCH CUR INTO @Name_DB
-
- WHILE (@@fetch_status=0)
- BEGIN
- -- Recherche le nom du journal de logs pour une Bdd.
- SET @Name_DB = RTRIM(@Name_DB)
- SET @SQL = 'SELECT name FROM '
- SET @SQL = @SQL + '[' + @Name_DB + ']'
- SET @SQL = @SQL + '.dbo.sysfiles WHERE status & CAST(0x40 AS INT) = CAST(0x40 AS INT)'
- --PRINT @SQL
- EXEC('DECLARE CUR2 CURSOR FOR '+ @SQL)
- OPEN CUR2
- FETCH NEXT FROM CUR2 INTO @Name_Journal_Logs
- SET @Name_Journal_Logs = RTRIM(@Name_Journal_Logs)
- --PRINT @Name_Journal_Logs
- CLOSE CUR2
- DEALLOCATE CUR2
-
- -- Recherche la taille du journal de logs (en MB)
- SET @SQL = 'SELECT SUM(size * 8)/1024 FROM '
- SET @SQL = @SQL + '[' + @Name_DB + ']'
- SET @SQL = @SQL + '.dbo.sysfiles WHERE name = ''' + @Name_Journal_Logs + ''''
- --PRINT @SQL
- EXEC('DECLARE CUR3 CURSOR FOR '+ @SQL)
- OPEN CUR3
- FETCH NEXT FROM CUR3 INTO @Size_Journal_Logs
- --PRINT @Size_Journal_Logs
- CLOSE CUR3
- DEALLOCATE CUR3
-
- -- Si la taille du journal de logs est supérieure à la taille max
- -- initialisée plus haut (@Size_Journal_Logs_Max) alors le journal de logs est tronqué.
- IF (@Size_Journal_Logs > @Size_Journal_Logs_Max)
- BEGIN
- --PRINT @Name_DB + ' => ' + @Name_Journal_Logs + ' : ' + CAST(@Size_Journal_Logs AS VARCHAR) + ' MB tronqué'
- EXEC ('BACKUP LOG [' + @Name_DB + '] WITH TRUNCATE_ONLY')
- EXEC ('USE [' + @Name_DB + '] DBCC SHRINKFILE ([' + @Name_Journal_Logs + '], ' + @Size_Journal_Logs_Max + ')')
- END
-
- FETCH CUR INTO @Name_DB
- END
- CLOSE CUR
- DEALLOCATE CUR
- GO
-- Procédure stockée permettant de tronquer le journal de logs de toutes les Bdd utilisateurs
CREATE PROCEDURE SHRINKLOGS AS
DECLARE
@Name_DB varchar(100),
@Name_Journal_Logs varchar(100),
@Size_Journal_Logs integer,
@Size_Journal_Logs_Max integer,
@SQL varchar(500)
-- Initialisation de la taille du journal de logs
-- Si un journal de logs dépasse cette taille (en MB)
-- il sera réduit à cette taille.
SET @Size_Journal_Logs_Max = 128
DECLARE CUR CURSOR FOR
-- Recherche le nom des Bdd utilisateurs.
SELECT name AS Name_DB
FROM master.dbo.sysdatabases
WHERE name NOT IN('master','msdb','model','tempdb','pubs')
OPEN CUR
FETCH CUR INTO @Name_DB
WHILE (@@fetch_status=0)
BEGIN
-- Recherche le nom du journal de logs pour une Bdd.
SET @Name_DB = RTRIM(@Name_DB)
SET @SQL = 'SELECT name FROM '
SET @SQL = @SQL + '[' + @Name_DB + ']'
SET @SQL = @SQL + '.dbo.sysfiles WHERE status & CAST(0x40 AS INT) = CAST(0x40 AS INT)'
--PRINT @SQL
EXEC('DECLARE CUR2 CURSOR FOR '+ @SQL)
OPEN CUR2
FETCH NEXT FROM CUR2 INTO @Name_Journal_Logs
SET @Name_Journal_Logs = RTRIM(@Name_Journal_Logs)
--PRINT @Name_Journal_Logs
CLOSE CUR2
DEALLOCATE CUR2
-- Recherche la taille du journal de logs (en MB)
SET @SQL = 'SELECT SUM(size * 8)/1024 FROM '
SET @SQL = @SQL + '[' + @Name_DB + ']'
SET @SQL = @SQL + '.dbo.sysfiles WHERE name = ''' + @Name_Journal_Logs + ''''
--PRINT @SQL
EXEC('DECLARE CUR3 CURSOR FOR '+ @SQL)
OPEN CUR3
FETCH NEXT FROM CUR3 INTO @Size_Journal_Logs
--PRINT @Size_Journal_Logs
CLOSE CUR3
DEALLOCATE CUR3
-- Si la taille du journal de logs est supérieure à la taille max
-- initialisée plus haut (@Size_Journal_Logs_Max) alors le journal de logs est tronqué.
IF (@Size_Journal_Logs > @Size_Journal_Logs_Max)
BEGIN
--PRINT @Name_DB + ' => ' + @Name_Journal_Logs + ' : ' + CAST(@Size_Journal_Logs AS VARCHAR) + ' MB tronqué'
EXEC ('BACKUP LOG [' + @Name_DB + '] WITH TRUNCATE_ONLY')
EXEC ('USE [' + @Name_DB + '] DBCC SHRINKFILE ([' + @Name_Journal_Logs + '], ' + @Size_Journal_Logs_Max + ')')
END
FETCH CUR INTO @Name_DB
END
CLOSE CUR
DEALLOCATE CUR
GO