教你如何缩小SQLServer数据库日志文件

本文提供了一种解决SQL Server中日志文件异常膨胀的方法。通过执行特定的T-SQL脚本,可以有效地减小日志文件的大小,避免因日志过大导致的空间浪费和性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

问题:数据库实际大小为600MB,日志文件实际大小为33MB,但日志文件占用空间为2.8GB!试了多种方式,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=(SELECTsize
FROMsysfilesWHEREname=@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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值