在SQL Server 2000查询分析器里面收缩数据库日志

楼主
在SQL Server 2000查询分析器里面收缩数据库日志
操作环境:Windows 2000 Advanced Server 英文版 + sp4、SQL Server 2000英文企业版+sp3

任务描述:

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

操作如下:

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


[QUOTE]

-- Prog: Xinsoft
-- Time: 2005-03-26 10:34


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[/QUOTE]


执行结果:

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

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


1楼
看不懂
不过佩服Xinsoft,都是英文版……
2楼
晕ing……
3楼
[QUOTE][b]下面引用由[u]BaSaRa[/u]发表的内容:[/b]

看不懂
不过佩服Xinsoft,都是英文版……[/QUOTE]

英文版也没什么了不起啊。
在Windows服务器上可能你见到的中文字还多一些,但是在Linux服务器上,尤其是远程在终端下操作,你几乎见不到中文字的:

[IMGA]http://www.chinalabs.com/resource/upload/pic/2005/03/26/834399868.1010.111556.jpg[/IMGA]
[URL]http://www.chinalabs.com/resource/upload/pic/2005/03/26/834399868.1010.111556.jpg[/URL]

而且有大量的关于服务器设置的文档需要你去看,这些文档可能以英文居多,而且并不见得每篇英文文档你都能看到中文翻译:

[IMGA]http://www.chinalabs.com/resource/upload/pic/2005/03/26/834399868.1011.111946.jpg[/IMGA]
[URL]http://www.chinalabs.com/resource/upload/pic/2005/03/26/834399868.1011.111946.jpg[/URL]

所以说,搞技术千万别惧怕看英文。



Pic by Xinsoft, 2005-03-26


4楼
排除畏怯心理 沉下来还是看的懂的
5楼
实际上还有其他方法,本人2个常用方法,但似乎没有猫老大的方法好。猫老大的可以指定文件大小,借鉴一下

1、选择数据库,右键“属性”,在“选项”的“设置”中将“自动收缩”选上,一段时间后就能看到效果了。
2、终极办法:记住数据库文件的路径,然后分离数据库,将对应的_log.log文件删掉(不放心可以改名字),然后在附加数据库(.mdf文件),这时候因为没有_log.log文件,它会创建一个新的Log文件,这样无形中就将文件收缩了。

电脑版 Page created in 0.0781 seconds with 4 queries.