El aspecto más importante a cuidar dentro de un servidor de base de datos, es precisamente mantener espacio disponible para poder realizar procedimientos e ingreso de datos. Sin embargo muchas veces no tenemos muchas formas de identificar cuales son los archivos que están sobrando dentro del servidor (Sistema operativo).
En SQL Server 2008 una de las características que más presenta problemas con este tema, es el crecimiento de los Logs de transacciones, el cual mantiene toda la información transaccional de la base de datos, es decir, las instrucciones insert, update y delete.
Para consultar el espacio de los archivos de log podemos realizar la siguiente consulta:
El resultado de esta consulta nos entregará información acerca de las bases de datos de la instancia, el tamaño de su correspondiente log, el porcentaje del log ocupado y, finalmente, el estado.
El siguiente script tiene por finalidad recorrer todas las bases de datos y truncar los logs que están por sobre el 90% de su capacidad. La idea de esto es mantener archivos de logs más pequeños, por otro lado se reduce también el tamaño de los backups. Es importante destacar que este script ha sido probado exitosamente en las versiones 2008, 2008 R2 y 2012 de SQL Server. NO ES COMPATIBLE con versiones anteriores (7, 2000, 2005).
En SQL Server 2008 una de las características que más presenta problemas con este tema, es el crecimiento de los Logs de transacciones, el cual mantiene toda la información transaccional de la base de datos, es decir, las instrucciones insert, update y delete.
Para consultar el espacio de los archivos de log podemos realizar la siguiente consulta:
DBCC SQLPERF(LOGSPACE)
El resultado de esta consulta nos entregará información acerca de las bases de datos de la instancia, el tamaño de su correspondiente log, el porcentaje del log ocupado y, finalmente, el estado.
El siguiente script tiene por finalidad recorrer todas las bases de datos y truncar los logs que están por sobre el 90% de su capacidad. La idea de esto es mantener archivos de logs más pequeños, por otro lado se reduce también el tamaño de los backups. Es importante destacar que este script ha sido probado exitosamente en las versiones 2008, 2008 R2 y 2012 de SQL Server. NO ES COMPATIBLE con versiones anteriores (7, 2000, 2005).
USE MASTER
GO
DECLARE @DBID INT, @PORC INT, @NAME VARCHAR(255), @RECOVERY VARCHAR(50), @NAMELOG VARCHAR(255), @SQL NVARCHAR(4000),@RM VARCHAR(255)
DECLARE CURSOR_SP CURSOR FOR
SELECT DATABASE_ID,INSTANCE_NAME,CNTR_VALUE ,RECOVERY_MODEL_DESC
FROM SYSPERFINFO,SYS.DATABASES
WHERE COUNTER_NAME = 'PERCENT LOG USED' AND INSTANCE_NAME != '_TOTAL' AND NAME = INSTANCE_NAME AND NAME NOT IN ('TEMPDB','MSDB','MASTER','MODEL')
OPEN CURSOR_SP
FETCH NEXT FROM CURSOR_SP INTO @DBID,@NAME, @PORC,@RM
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@PORC >=90)
BEGIN
SELECT TOP 1 @NAMELOG = F.NAME FROM SYSALTFILES F WHERE GROUPID = 0 AND @DBID = DBID
SET @SQL = 'USE [' + RTRIM(@NAME) +']' + CHAR(13) + 'CHECKPOINT' + (CASE @RM WHEN 'FULL' THEN CHAR(13) +'ALTER DATABASE '+ RTRIM(@NAME) +' SET RECOVERY SIMPLE ' ELSE '' END ) + CHAR(13) + 'DBCC SHRINKFILE('''+RTRIM(@NAMELOG)+''', 1)' + (CASE @RM WHEN 'FULL' THEN CHAR(13) +'ALTER DATABASE '+ RTRIM(@NAME) +' SET RECOVERY FULL ' ELSE '' END ) + CHAR(13)
--PRINT @SQL
EXEC(@SQL)
END
FETCH NEXT FROM CURSOR_SP INTO @DBID,@NAME, @PORC,@RM
END
CLOSE CURSOR_SP
DEALLOCATE CURSOR_SP
Comments
Post a Comment