SQL Server(2005/2008):完整备份是否以完全恢复模式截断日志

我刚刚阅读了很多MSDN文档,我想我理解不同的恢复模式和备份链的概念。 我还有一个问题:

完整的数据库备份是否会截断事务日志(使用完全恢复模式)?

没有 – 它绝对不是。 唯一允许日志在FULL或BULK_LOGGED恢复模式中清除/截断的是日志备份 – 没有例外。 我早就有了这个观点,并且发表了一篇长篇详细的博客文章,上面有一个解释和一个脚本,你可以用它来certificate自己在围绕日志和日志备份的误解:如何说服自己 。

随时跟进更多的问题。 顺便说一句 – 另请参阅我为TechNet杂志撰写的关于了解SQL Server中的日志logging和恢复的文章 。

谢谢

完整备份不会截断日志,您必须执行备份日志操作。 完整的备份不会重新设置日志链 – 这将完全搞砸复制/日志传送等。

您必须仔细研究SQL Server如何备份,但知道备份中不包含正在运行/长时间运行的事务(否则备份可能永远不会完成),所以说完全备份在线数据库保证使下一个日志备份过时。

http://msdn.microsoft.com/en-us/library/ms175477.aspx

根据我的理解,截断事务日志的唯一事情就是日志备份

完整备份只复制足够的日志,以使其在事务上一致,因为备份操作需要一段时间才能完成,在此期间,复制的页面可能已更改。

您仍然需要您的日志备份来进行时间点恢复。

我没有MSDN链接,但我可以链接到Paul Randal的博客 ,他是SQL Server团队的开发人员,编写了DBCC CHECKDB和部分Books Online。

他也回答了这个论坛上的问题,所以这将是一个更好的权威,然后从我的第二/第三手资料:)

人们经常对完整的备份和日志备份有一个误解。 为了使备份在FULL备份恢复模式下工作,必须使用t日志,因为在备份过程中,数据库中可能还有事务正在进行(除非在closures数据库时执行所谓的COLD备份)。 在ARCHIVELOG模式下使用数据库时,Oracle使用相同的概念。 备份的顺序归结为:

  1. 开始备份 – 暂停所有在真实文件中的操作并写入t日志。
  2. 执行备份 – 所有事务继续,但不写入实际文件,它们被写入t日志
  3. 结束备份 – 恢复将数据库事务写入实际文件。
  4. 如有必要,将T-logs中的内容刷新到真实文件中。

这就是为什么t日志不被默认截断/缩小的原因,因为它们是备份阶段中事务延续的重要组成部分。

不要混淆截断日志与收缩日志。

  • TRUNCATE是删除日志中最后一个检查点之前的事务(检查点是当事务刷新到数据库本身时)。 这是使用BACKUP命令完成的。

  • 收缩日志是为了减less实际的日志文件大小。 这是使用DBCC命令完成的。

基本上,你不需要每次都自动收缩事务日志,因为事务日志需要空间来工作,如果你自动截断,它将保持几乎相同的大小。