1.1 第一步
use tempdb
go
CHECKPOINT
go
1.2 第二步
BACKUP LOG tempdb WITH NO_LOG
go
1.3 第三步
--根据当前日志文件大小,依次减少目标大小,执行下面语句。
--例:如果templog 约有30G
DBCC shrinkfile(templog,29000)
go
DBCC shrinkfile(templog,26000)
go
1.4 最终
DBCC shrinkfile(templog,100)
go
--说明:tempdb日志暴涨一般是tempdb的中事务结束后,日志中对应的部分没有置为inactive,每次事务都要请求新的存储空间,所以日志占用空间暴涨。在正常情况下sqlserver自动会调用checkpoint,在事务结束的后日志会被置为inactive,被置为inactive部分的日志是可以被重复利用的,所以正常情况下日志不会太大。若sqlserver的自动调用checkpoint机制有问题,需要通过增加job方式来解决这个问题。 补充1:
若手工收缩日志后,过一段时间tempdb又出现暴涨情况,则需要建立tempdb收缩日志作业。
(1)在sqlserver 中新建一个任务,每15分钟执行一次,对应数据库选tempdb。
(2)任务脚本:
use tempdb
go
CHECKPOINT
go
BACKUP LOG tempdb WITH NO_LOG
go
DBCC shrinkfile(templog,100)
go 补充2:
在遇到tempdb库数据文件过大导致清除不掉的问题,可以通过下面语句来清除(测试其它方法均无效的情况下)。
dbcc shrinkfile (tempdev, 10)
go
dbcc shrinkfile (templog, 10)
go