EXECUTE sp_msforeachdb 'USE?; DUMP TRANSACTION? COM NO_LOG; DECLARAR @LogLogicalName nvarchar (100); SELECT @LogLogicalName = file_name (2); DBCC SHRINKFILE (@LogLogicalName, 100); '
sp_msforeachdb: é um procedimento armazenado da Microsoft não documentado que permite a execução de código T-SQL em todos os bancos de dados em um servidor. ?: é o nome do banco de dados retornado pelo procedimento armazenado. file_name (2): é uma função que retorna o nome lógico do arquivo de log do banco de dados. Outra solução é este outro script, que reduz o log no banco de dados por meio de um loop:
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 ONDE db.name não está em ('master', 'tempdb', 'model', 'msdb', 'distribuição') AND type_desc LIKE 'log' SET NOCOUNT ON DECLARE @VarDBLogicalName nvarchar (128) DECLARE @VarDBName nvarchar (128) DECLARE @VarRowCount int SELECT topo 1 @VarDBName = DBName, @VarDBLogicalName = DBLogicalName FROM #TDatabases SET @VarRowCount = @@ rowcount WHILE @VarRowCount <> 0 BEGIN PRINT @VarDBLogicalName EXEC ('usar' + @VarDBName + 'backup log' VarDBName + 'with no_log dbcc shrinkfile (' '' + @VarDBLogicalName + '' ', TRUNCATEONLY) WITH NO_INFOMSGS') DELETE FROM #TDatabases WHERE DBName = @VarDBName SELECT topo 1 @VarDBName = DBName, @VarDBLogicalName = DBLogicalName FROM @VarRowCount = @@ ROWCOUNT END DROP TABLE #TDatabases SET NOCOUNT OFF