SQL SERVER 2012断日志

有一个SQL2012库的日志达到了100G左右,平时开发人员根本没有做过事务日志备份,而磁盘空间已经快满了。所以,只能截断它。但是,由于从2K8以后,SQL SERVER好像不再提供 truncate_only和no_log功能了,而这个服务器的磁盘空间也不够。所以,只能采用切换到简单恢复模式方式,来先将已经完成的事务truncate了。然后shrik日志文件来回收空间了。

--查询事务日志的状态,可以看到是LOG_BACKUP状态,说明需要备份日志。

--http://msdn.microsoft.com/zh-cn/library/ms190925.aspx#Truncation

select name,log_reuse_wait_desc from sys.databases

--查看LOG使用情况

dbcc sqlperf(LOGSPACE)--已经使用的百分比

dbcc loginfo --查看status列基本上都是2表示不可以重用,只有0时候才可以重新使用。

--切换到简单恢复模式

alter database test set recovery simple with no_wait--再次使用dbcc loginfo 查看,可以看到很多status原来是2的已经变为0.

--切回到FULL

alter database test set FULL simple with no_wait

--这个时候你可以试着插入数据,观看status的值。你会发现它虽然恢复模型已经切回FULL,但是,它的事务日志使用方式还是SIMPLE模式,也就是还可以重新使用已经提交日志空间。这个时候,我们只有做一个全库备份才可以真正切回FULL模式。(记得好像如果新建一个数据库也有这个情况。只有建完以后,马上做一个全库备份以后,才是真正的FULL模式。)

--这个时候,如果你想通过shrink日志文件来缩小文件会发现不起做用。只有你做完以后日志备份后,再去shrik才可以功能。

backup log test to disk='d:\test.log'

DBCC SHRINKFILE (N'Test_log' , 0, TRUNCATEONLY)

 参考资料:

简介数据库日志文件的增长

SQL Server 何时将“脏页”回写到硬盘

你可能感兴趣的:(SQL Server)