--勉励自己努力以钉子的“挤”劲和“钻”劲提升自己
 :: Blog List ::
钉子 发表于 2005-4-23 9:56:21
操作环境:Windows 2000 Advanced Server 英文版 + sp4、SQL Server 2000英文企业版+sp3

任务描述:

我有一个数据库,名称为:Cisi。它的数据库日志的名称为:Cisi_log
这个日志的大小为1082M,现在我要把它截断,令其收缩为10M

操作如下:

在查询分析器里面,用sa登录,然后执行下列语句:







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


USE Cisi                                             -- 要操作的数据库名
SELECT  @LogicalFileName = 'Cisi_log',  -- 日志文件名
@MaxMinutes = 10,                             -- Limit on time allowed to wrap log.
           @NewSize = 10                        -- 你想设定的日志文件的大小(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
--Drop TABLE DummyTrans
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



执行结果:

Original Size of Cisi LOG is 138600 8K pages or 1082MB
Final Size of Cisi LOG is 1303 8K pages or 10MB



数据库日志已成功地收缩为10M。

 

(转自http://xinsoft.blogchina.com/blog/article_762.1387785.html)

发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:
Best view with 1024 x 768 pixel & IE 6.0.
About Me
Archives Categories
Replies List
My FriendLinks
Blog Info

Powered by Oblog.