缩小SQL Server日志文件的SQL语句

 

把下面的代码粘贴到SQL Query Analyzer(查询分析器)里执行即可(注意修改红色部分的3个参数):

SET  NOCOUNT  ON
DECLARE  @LogicalFileName sysname,
@MaxMinutes 
INT ,
@NewSize 
INT


USE  Dicky   -- 需要缩小日志的数据库名
SELECT  @LogicalFileName  =   ' Dicky_Log ' ,   -- 日志文件的逻辑名,非物理文件名
@MaxMinutes  =   10 --  Limit on time allowed to wrap log.
@NewSize  =   2   -- 需要重新设定的日志文件的大小(单位: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  

 

你可能感兴趣的:(SQL Server)