SQL2005日志清理

SQL2005 1个多G的日志,有时候清不掉。所以找了这段代码。  
有时候清理日志未清理成1M 请多执行几遍。一般清况下执行一次就可以的。
我碰到过要执行两遍的。

 1 SELECT @LogicalFileName = 'Test_log'

Test_log 为日志逻辑名称。

 



 
   --  =============================================
  --  Author:        fighter
   --  Create date:   2009-3-15
   --  Description:   clear sql log
  --  =============================================
  CREATE   PROCEDURE   [ dbo ] . [ tools_ClearSqlLog ]
      
  AS
  BEGIN
 
  SET  NOCOUNT  ON
  DECLARE   @LogicalFileName  sysname,
  @MaxMinutes   INT ,
  @NewSize   INT  
 
  SELECT   @LogicalFileName   =   ' Test_log '
  @MaxMinutes   =   1
  @NewSize   =   1
   
  --  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
 
  END
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值