EXÉCUTER sp_msforeachdb 'USE ?; TRANSACTION DE dumping ? AVEC NO_LOG ; DÉCLARER @LogLogicalName nvarchar(100); SELECT @LogLogicalName = nom_fichier(2); DBCC SHRINKFILE(@LogLogicalName, 100);'
sp_msforeachdb: est une procédure stockée Microsoft non documentée qui vous permet d'exécuter du code T-SQL sur toutes les bases de données d'un serveur. ?: est le nom de la base de données renvoyé par la procédure stockée. nom_fichier(2): est une fonction qui renvoie le nom logique du fichier journal de la base de données. Une autre solution est cet autre script, qui réduit le journal sur la base de données via une boucle :
CREATE TABLE #TDatabases( DBName nvarchar(128), DBLogicalName nvarchar(128) ) INSERT INTO #TDatabases SELECT db.name DBName, mf.name DBLogicalName FROM sys.databases db join sys.master_files mf on db.database_id = mf.database_id O db.name not in ('master', 'tempdb', 'model', 'msdb', 'distribution') AND type_desc LIKE 'log' SET NOCOUNT ON DECLARE @VarDBLogicalName nvarchar(128) DECLARE @VarDBName nvarchar(128) DECLARE @VarRowCount int SELECTIONNER top 1 @VarDBName = DBName, @VarDBLogicalName = DBLogicalName FROM #TDatabases SET @VarRowCount = @@rowcount WHILE @VarRowCount <> 0 BEGIN PRINT @VarDBLogicalName EXEC(' use ' + @VarDBName + ' backup log '+ VarDBName + ' with no_log dbcc Shrinkfile(''' + @VarDBLogicalName + ''', TRUNCATEONLY) WITH NO_INFOMSGS') DELETE FROM #TDatabases WHERE DBName = @VarDBName SELECT top 1 @VarDBName = DBName, @VarDBLogicalName = DBLogicalName FROM #TDatabases SET @VarRowCount = @@ROWCOUNT END DROP TABLE #TDatabases SET NOCOUNT OFF