注册
 找回密码
 注册
江西广告网
查看: 291|回复: 0
打印 上一主题 下一主题

如何缩小SQL数据库日记的大小

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-1-17 08:33:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  以下是引用片段:   缩小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 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表