如何缩小SQL Server数据库日志文件

数据库实际大小为600MB, 日志文件实际大小为33MB, 但日志文件占用空间为2.8GB!试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小。无论如何,这应该算SQL Server的一个BUG吧。

  专家解答:找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可。

None.gif SET  NOCOUNT  ON  
None.gif  
DECLARE   @LogicalFileName  sysname, 
None.gif  
@MaxMinutes   INT
None.gif  
@NewSize   INT  
None.gif  
USE  Marias 
None.gif  
--  要操作的数据库名 
None.gif
   SELECT   @LogicalFileName   =   ' Marias_log '  
None.gif  
--  日志文件名 
None.gif
   @MaxMinutes   =   10
None.gif  
--  Limit on time allowed to wrap log. 
None.gif
   @NewSize   =   100  
None.gif  
--  你想设定的日志文件的大小(M) 
None.gif
   --  Setup / initialize 
None.gif
   DECLARE   @OriginalSize   int  
None.gif  
SELECT   @OriginalSize   =  size 
None.gif  
FROM  sysfiles 
None.gif  
WHERE  name  =   @LogicalFileName  
None.gif  
SELECT   ' Original Size of  '   +   db_name ()  +   '  LOG is  '   +  
None.gif  
CONVERT ( VARCHAR ( 30 ), @OriginalSize +   '  8K pages or  '   +  
None.gif  
CONVERT ( VARCHAR ( 30 ),( @OriginalSize * 8 / 1024 ))  +   ' MB '  
None.gif  
FROM  sysfiles 
None.gif  
WHERE  name  =   @LogicalFileName  
None.gif  
CREATE   TABLE  DummyTrans 
None.gif  (DummyColumn 
char  ( 8000 not   null
None.gif  
DECLARE   @Counter   INT
None.gif  
@StartTime   DATETIME
None.gif  
@TruncLog   VARCHAR ( 255
None.gif  
SELECT   @StartTime   =   GETDATE (), 
None.gif  
@TruncLog   =   ' BACKUP LOG  '  
None.gif  
+   db_name ()  +   '  WITH TRUNCATE_ONLY '  
None.gif  
DBCC  SHRINKFILE ( @LogicalFileName @NewSize
None.gif  
EXEC  ( @TruncLog
None.gif  
--  Wrap the log if necessary. 
None.gif
   WHILE   @MaxMinutes   >   DATEDIFF  
None.gif  (mi, 
@StartTime GETDATE ())  --  time has not expired 
None.gif
   AND   @OriginalSize   =  ( SELECT  size 
None.gif  
FROM  sysfiles  WHERE  name  =   @LogicalFileName
None.gif  
AND  ( @OriginalSize   *   8   / 1024 >   @NewSize  
None.gif  
BEGIN   --  Outer loop. 
None.gif
   SELECT   @Counter   =   0  
None.gif  
WHILE  (( @Counter   <   @OriginalSize   /   16
None.gif  
AND  ( @Counter   <   50000 )) 
None.gif  
BEGIN   --  update 
None.gif
   INSERT  DummyTrans  VALUES  ( ' Fill Log '
None.gif  
DELETE  DummyTrans 
None.gif  
SELECT   @Counter   =   @Counter   +   1  
None.gif  
END  
None.gif  
EXEC  ( @TruncLog
None.gif  
END  
None.gif  
SELECT   ' Final Size of  '   +   db_name ()  +   '  LOG is  '   +  
None.gif  
CONVERT ( VARCHAR ( 30 ),size)  +   '  8K pages or  '   +  
None.gif  
CONVERT ( VARCHAR ( 30 ),(size * 8 / 1024 ))  +   ' MB '  
None.gif  
FROM  sysfiles 
None.gif  
WHERE  name  =   @LogicalFileName  
None.gif  
DROP   TABLE  DummyTrans 
None.gif  
SET  NOCOUNT  OFF

转载于:https://www.cnblogs.com/Steven-zhou-2005/archive/2007/06/22/793264.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值