技术开发 频道

SQL Server日志文件庞大收缩并非易事

  3、如何解决这个问题

  那么碰到这种情况,该怎么去收缩日志呢:尽可能多的执行一些能够产生大量日志的操作,这些日志将导致数据库重新利用startoffset靠前的非活动状态的VLF,将首日志的位置定位到这个startoffset,然后做一次事务日志备份,将尾日志也迁移到startoffset靠前的非活动状态的VLF中,如下图,最后再执行DBCC SHRINKFILE即可收缩日志文件。


▲(图六)日志截断示意图三  

  三、重要说明

  前文中一直在说通过日志备份即可解决日志截断的问题,其实这只是最简单的场景。在实际环境中可能有很多因素会影响日志的截断,如:

  活动的事物日志

  日志备份只能截断非活动的日志,如果一个事物长时间运行,此时备份事物日志将不会引起截断发生。

  事物日志分发

  事物日志分发中,只有当日志读取器代理已经读取完待分发的日志后,日志才能变得非活动状态。(之前我处理过一个类似问题,大家可以通过这个链接看看http://www.cnblogs.com/i6first/p/3281437.html。)

  数据库镜像和AlwaysOn

  这两种数据库技术都需要将日志传递到接受端,在传递还没有完成时,日志会一直保留,即使是备份日志也无法截断。

  原文链接:http://rusanu.com/2012/07/27/how-to-shrink-the-sql-server-log/

  更多精彩尽在2014年4月10日-12日在北京五洲皇冠国际酒店举办的第五届中国数据库技术大会,2月29日之前订票可享受7.8折最低票价。

Facebook专家:Hadoop不足以处理大数据
进入官网了解更多详情

0
相关文章