CULTURA
Cómo reducir el archivo de registro en todas las bases de datos
Aquí hay una forma de hacerlo. encogerse del registro de transaccionesarchivo .ldf) que a menudo crece desproporcionadamente en Sql Server.
Para evitar repetir la declaración en cada base de datos en el servidor, el script subyacente funciona en el todas las bases de datos en el servidor.
EXECUTE sp_msforeachdb 'USE ?; DUMP TRANSACTION ? WITH NO_LOG; DECLARE @LogLogicalName nvarchar(100); SELECT @LogLogicalName = file_name(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:
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 WHERE 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 SELECT 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
Hola fab