Truncar log de BD

este procedimiento me lo encontre y lo programo despues del backup diario para liberar espacio en el servidor de SQL Server.

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[TRUNCARLOG]    Script Date: 28/04/2016 9:52:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE  [dbo].[TRUNCARLOG] as
DECLARE @dbName AS VARCHAR(100)
DECLARE @cmd AS VARCHAR(MAX)
DECLARE c1 CURSOR FOR
SELECT name FROM master..sysdatabases sdb
WHERE sdb.name NOT IN (‘master’,’model’,’msdb’,’pubs’,’northwind’,’tempdb’) and  sdb.name NOT LIKE ‘%Share%’
ORDER BY name

OPEN c1

FETCH NEXT FROM c1
INTO @dbName

WHILE @@FETCH_STATUS = 0
BEGIN
–Establecer la base de datos en uso
SET @cmd = ‘USE ‘ + @dbName

–Si se establece el modo de restauración a simple, las partes inactivas del log de transacción deben ser borradas
–Este comando reducirá el archivo de log un poco
SET @cmd = @cmd + ‘ ALTER DATABASE ‘ + @dbName + ‘ SET RECOVERY SIMPLE’

–Obtener el nombre de log de la base de datos
SET @cmd = @cmd + ‘ DECLARE @logFile AS NVARCHAR(1000)’
SET @cmd = @cmd + ‘ SELECT @logFile = name FROM ‘ + @dbName + ‘.sys.database_files WHERE type_desc = »LOG»’
–Cambiar el modo de restauración a Simple no es suficiente, esto reduce el log a 1 MB
SET @cmd = @cmd + ‘ DBCC SHRINKFILE (@logFile , 1)’

EXEC(@cmd)
SET @cmd = @cmd + ‘ ALTER DATABASE ‘ + @dbName + ‘ SET RECOVERY FULL’
EXEC(@cmd)
FETCH NEXT FROM c1
INTO @dbName
END

CLOSE c1
DEALLOCATE c1

 

Deja un comentario