EJECUTAR sp_msforeachdb 'USE?; ¿TRANSACCIÓN DE VOLQUETE? WITH NO_LOG; DECLARE @LogLogicalName nvarchar (100); SELECT @LogLogicalName = nombre_archivo (2); DBCC SHRINKFILE (@LogLogicalName, 100); '
sp_msforeachdb: es un procedimiento almacenado de microsoft no documentado que le permite ejecutar código T-SQL en todas las bases de datos de un servidor. ?: es el nombre de la base de datos devuelto por el procedimiento almacenado. nombre_archivo (2): es una función que devuelve el nombre lógico del archivo de registro de la base de datos. Otra solución es este otro script, que reduce el registro en la base de datos a través de un bucle:
CREAR TABLA #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 en db.database_id = mf.database_id WHERE db.name no está en ('master', 'tempdb', 'model', 'msdb', 'distribution') Y type_desc LIKE 'log' ESTABLECER NOCOUNT ON DECLARE @VarDBLogicalName nvarchar (128) DECLARE @VarDBName nvarchar (128) DECLARE @VarRowCount int SELECT top 1 @VarDBName = DBName, @VarDBLogicalName = DBLogicalName FROM #TDatabases SET @VarRowCount = @@ rowcount MIENTRAS @VarRowCount <> 0 BEGIN PRINT @VarDBLogicalName EXEC ('use' + @VarDBogicalName + ' VarDBName + 'con no_log dbcc shrinkfile (' '' + @VarDBLogicalName + '' ', TRUNCATEONLY) WITH NO_INFOMSGS') BORRAR DE #TDatabases DONDE DBName = @VarDBName SELECCIONAR arriba 1 @VarDBName = DBName, @VarDBLogicalName SET = @VarRowCount = @@ ROWCOUNT END DROP TABLE #TDatabases ESTABLECER NOCOUNT OFF