Sql Server 清除日志的存储过程 Procedure of cleaning sql server's log

 

CREATE   PROCEDURE   [ dbo ] . [ strink_logspace ]
 
AS
   
SET  NOCOUNT  ON
   
DECLARE   @LogicalFileName  sysname,
           
@MaxMinutes   INT ,
           
@NewSize   INT

   
SELECT    @LogicalFileName   =   rtrim (name),
           
@MaxMinutes   =   10 ,       --  最大执行时间
            @NewSize      =   10         --  最小空间
    from  sysfiles  where  status  &   0x40   =   0x40

   
--  Setup / initialize
    DECLARE   @OriginalSize   int
   
SELECT   @OriginalSize   =  size  --  in 8K pages
      FROM  sysfiles
     
WHERE  name  =   @LogicalFileName

   
SELECT   db_name ()  + ' 日志原始大小 '   +   
           
CONVERT ( VARCHAR ( 30 ), @OriginalSize +   '  pages/ 8K 或  '   +  
           
CONVERT ( VARCHAR ( 30 ),( @OriginalSize * 8 / 1024 ))  +   ' MB '
     
FROM  sysfiles
     
WHERE  name  =   @LogicalFileName

   
CREATE   TABLE  DummyTrans
     (DummyColumn 
char  ( 8000 not   null )

   
--  Wrap log and truncate it.
    DECLARE   @Counter     INT ,
           
@StartTime   DATETIME ,
           
@TruncLog    VARCHAR ( 255 )
   
SELECT    @StartTime   =   GETDATE (),
           
@TruncLog   =   ' BACKUP LOG [ ' +   db_name ()  +   ' ] WITH TRUNCATE_ONLY '
   
--  Try an initial shrink.
    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 )   --  the log has not shrunk    
          AND  ( @OriginalSize   *   8   / 1024 >   @NewSize    --  The value passed in for new size is smaller than the current size.
      BEGIN   --  Outer loop.
        SELECT   @Counter   =   0
       
WHILE   (( @Counter   <   @OriginalSize   /   16 AND  ( @Counter   <   50000 ))
         
BEGIN   --  update
            INSERT  DummyTrans  VALUES  ( ' Fill Log ' )   --  Because it is a char field it inserts 8000 bytes.
            DELETE  DummyTrans
           
SELECT   @Counter   =   @Counter   +   1
         
END     --  update
        EXEC  ( @TruncLog )   --  See if a trunc of the log shrinks it.
      END     --  outer loop

   
DBCC  SHRINKFILE ( @LogicalFileName @NewSize )

   
SELECT   db_name ()  + ' 日志最后大小 '   +  
           
CONVERT ( VARCHAR ( 30 ),size)  +   '  pages/ 8K 或   '   +  
           
CONVERT ( VARCHAR ( 30 ),(size * 8 / 1024 ))  +   ' MB '
     
FROM  sysfiles 
     
WHERE  name  =   @LogicalFileName
   
DROP   TABLE  DummyTrans
   
PRINT   ' *** 数据库日志压缩成功 *** '

转载于:https://www.cnblogs.com/Magicworks/archive/2008/06/05/1214518.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值