也谈如何缩小SQLSERVER日志文件
2008-04-28 14:39
351 查看
前几天也碰到日志文件过大的问题,实际大小为600M,日志文件实际大小为33M,但日志文件占用空间为2.8G!!!
试了多种方式,SHIRNKDATABASE,TRUNCATELOGFILE,都没办法将文件缩小。无论如何,这应该算SQLSERVER的一个BUG吧。
后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可(我已经用过多次了)
-----
SETNOCOUNTON
DECLARE@LogicalFileNamesysname,
@MaxMinutesINT,
@NewSizeINT
USE Marias --要操作的数据库名
SELECT @LogicalFileName='Marias_log', --日志文件名
@MaxMinutes=10, --Limitontimeallowedtowraplog.
@NewSize=100 --你想设定的日志文件的大小(M)
--Setup/initialize
DECLARE@OriginalSizeint
SELECT@OriginalSize=size
FROMsysfiles
WHEREname=@LogicalFileName
SELECT'OriginalSizeof'+db_name()+'LOGis'+
CONVERT(VARCHAR(30),@OriginalSize)+'8Kpagesor'+
CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+'MB'
FROMsysfiles
WHEREname=@LogicalFileName
CREATETABLEDummyTrans
(DummyColumnchar(8000)notnull)
DECLARE@Counter INT,
@StartTimeDATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime=GETDATE(),
@TruncLog='BACKUPLOG'+db_name()+'WITHTRUNCATE_ONLY'
DBCCSHRINKFILE(@LogicalFileName,@NewSize)
EXEC(@TruncLog)
--Wrapthelogifnecessary.
WHILE @MaxMinutes>DATEDIFF(mi,@StartTime,GETDATE())--timehasnotexpired
AND@OriginalSize=(SELECTsizeFROMsysfilesWHEREname=@LogicalFileName)
AND(@OriginalSize*8/1024)>@NewSize
BEGIN--Outerloop.
SELECT@Counter=0
WHILE ((@Counter<@OriginalSize/16)AND(@Counter<50000))
BEGIN--update
INSERTDummyTransVALUES('FillLog')
DELETEDummyTrans
SELECT@Counter=@Counter+1
END
EXEC(@TruncLog)
END
SELECT'FinalSizeof'+db_name()+'LOGis'+
CONVERT(VARCHAR(30),size)+'8Kpagesor'+
CONVERT(VARCHAR(30),(size*8/1024))+'MB'
FROMsysfiles
WHEREname=@LogicalFileName
DROPTABLEDummyTrans
SETNOCOUNTOFF
试了多种方式,SHIRNKDATABASE,TRUNCATELOGFILE,都没办法将文件缩小。无论如何,这应该算SQLSERVER的一个BUG吧。
后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可(我已经用过多次了)
-----
SETNOCOUNTON
DECLARE@LogicalFileNamesysname,
@MaxMinutesINT,
@NewSizeINT
USE Marias --要操作的数据库名
SELECT @LogicalFileName='Marias_log', --日志文件名
@MaxMinutes=10, --Limitontimeallowedtowraplog.
@NewSize=100 --你想设定的日志文件的大小(M)
--Setup/initialize
DECLARE@OriginalSizeint
SELECT@OriginalSize=size
FROMsysfiles
WHEREname=@LogicalFileName
SELECT'OriginalSizeof'+db_name()+'LOGis'+
CONVERT(VARCHAR(30),@OriginalSize)+'8Kpagesor'+
CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+'MB'
FROMsysfiles
WHEREname=@LogicalFileName
CREATETABLEDummyTrans
(DummyColumnchar(8000)notnull)
DECLARE@Counter INT,
@StartTimeDATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime=GETDATE(),
@TruncLog='BACKUPLOG'+db_name()+'WITHTRUNCATE_ONLY'
DBCCSHRINKFILE(@LogicalFileName,@NewSize)
EXEC(@TruncLog)
--Wrapthelogifnecessary.
WHILE @MaxMinutes>DATEDIFF(mi,@StartTime,GETDATE())--timehasnotexpired
AND@OriginalSize=(SELECTsizeFROMsysfilesWHEREname=@LogicalFileName)
AND(@OriginalSize*8/1024)>@NewSize
BEGIN--Outerloop.
SELECT@Counter=0
WHILE ((@Counter<@OriginalSize/16)AND(@Counter<50000))
BEGIN--update
INSERTDummyTransVALUES('FillLog')
DELETEDummyTrans
SELECT@Counter=@Counter+1
END
EXEC(@TruncLog)
END
SELECT'FinalSizeof'+db_name()+'LOGis'+
CONVERT(VARCHAR(30),size)+'8Kpagesor'+
CONVERT(VARCHAR(30),(size*8/1024))+'MB'
FROMsysfiles
WHEREname=@LogicalFileName
DROPTABLEDummyTrans
SETNOCOUNTOFF
相关文章推荐
- 也谈如何缩小SQL SERVER日志文件
- 也谈如何缩小SQL SERVER日志文件
- 也谈如何缩小SQL SERVER日志文件
- 也谈如何缩小SQL SERVER日志文件
- 当重装数系统/数据库之后,如何恢复数据库的账号 登录名/用户名 孤立用户 缩小ldf日志文件 修改sqlserver2000端口
- SQL Server 2000数据库的事务日志文件过大,如何将其缩小?
- 如何缩小SQL SERVER日志文件
- 如何缩小SQL SERVER日志文件
- [ZT]如何使SQLServer的日志文件不会增大
- sqlserver 数据库缩小ldf数据库日志文件大小 .
- 如何缩小MS SQL Server日志文件
- 教你如何缩小SQLServer数据库日志文件
- 问题:SQL Server 2000数据库的事务日志文件过大,如何将其缩小?
- 如何缩小SQL Server数据库日志文件
- 如何缩小SQL SERVER日志文件
- 如何缩小MSSQL中巨大的事务日志文件
- 缩小SQLSERVER日志文件
- sqlserver 数据库缩小ldf数据库日志文件大小
- [转]如何缩小MSSQL的日志文件
- 如何缩小SQL SERVER日志文件