江西广告网

标题: 如何缩小SQL数据库日记的大小 [打印本页]

作者: 有色    时间: 2009-1-17 08:33
标题: 如何缩小SQL数据库日记的大小
  以下是引用片段:   缩小SQL数据库日记的大小      一般情况下,当SQL数据库日记文件太大时,很难将其压缩到更小。   通过下面的这段批处理SQL程序序就可以实现了。(试用通过!!!)   注:修改下面的三个备注处的参数即可COPY到查询分析器里执行了。      SET NOCOUNT ON   DECLARE @LogicalFileName sysname,   @MaxMinutes INT,   @NewSize INT      USE dvbbs-- 要操作的数据库名   SELECT @LogicalFileName = 'dvbbs_log', -- 日志文件名   @MaxMinutes = 10, -- Limit on time allowed to wrap log.   @NewSize = 20 -- 你想设定的日志文件的大小(M)      -- Setup / initialize   DECLARE @OriginalSize int   SELECT @OriginalSize = size   FROM sysfiles   WHERE name = @LogicalFileName   SELECT 'Original Size of ' db_name() ' LOG is '   CONVERT(VARCHAR(30),@OriginalSize) ' 8K pages or '   CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) 'MB'   FROM sysfiles   WHERE name = @LogicalFileName   CREATE TABLE DummyTrans   (DummyColumn char (8000) not null)      DECLARE @Counter INT,   @StartTime DATETIME,   @TruncLog VARCHAR(255)   SELECT @StartTime = GETDATE(),   @TruncLog = 'BACKUP LOG ' db_name() ' WITH TRUNCATE_ONLY'      DBCC SHRINKFILE (@LogicalFileName, @NewSize)   EXEC (@TruncLog)   -- Wrap the log if necessary.   WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired   AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)   AND (@OriginalSize * 8 /1024) > @NewSize   BEGIN -- Outer loop.   SELECT @Counter = 0   WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))   BEGIN -- update   INSERT DummyTrans valueS ('Fill Log')   DELETE DummyTrans   SELECT @Counter = @Counter 1   END   EXEC (@TruncLog)   END   SELECT 'Final Size of ' db_name() ' LOG is '   CONVERT(VARCHAR(30),size) ' 8K pages or '   CONVERT(VARCHAR(30),(size*8/1024)) 'MB'   FROM sysfiles   WHERE name = @LogicalFileName   DROP TABLE DummyTrans   SET NOCOUNT OFF <




欢迎光临 江西广告网 (http://bbs.jxadw.com/) Powered by Discuz! X3.2