SQL Server(2005/2008):完全备份会在完全恢复模式下截断日志吗


41

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

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

  • 如果是:MSDN在何处提及?我所能找到的就是只有BACKUP LOG会截断日志。

  • 如果没有:为什么?由于完整的数据库备份会启动新的备份链,因此在日志中保持完整备份之前完成的事务的意义何在?

Answers:


43

不-绝对不是。该允许日志在FULL或BULK_LOGGED恢复模型明确/截断的是一个日志备份-没有例外。我有一阵子争论不休,并发表了一篇冗长而详细的博客文章,其中包含解释和脚本,您可以用来在日志和日志备份的误解中向自己证明:如何说服自己

随时提出更多问题。顺便说一句,也请参阅我为《 TechNet杂志》撰写的关于理解SQL Server中的日志记录和恢复的长篇文章。

谢谢


非常感谢您的超级回答,先生,它回答了我一百万个问题。
M.Ali 2014年

13

完全备份不会截断日志,您必须执行备份日志操作。完整备份不会重新设置日志链-完全会破坏复制/日志传送等。

您必须仔细研究SQL Server的备份方式,但要知道备份中不包含进行中的/长期运行的事务(否则备份可能永远不会完成),因此对某个服务器的完整备份说得不太准确。保证在线数据库可以使下一个日志备份过时。

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


8

据我了解,唯一会截断事务日志的是日志备份

完全备份仅复制足够的日志,以使其在事务上保持一致,因为完成备份操作需要一段时间,并且在这段时间内复制的页面可能已更改。

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

我没有MSDN可以链接,但是我可以将您链接到Paul Randal的博客,该博客是SQL Server团队的开发人员,写了DBCC CHECKDB和《在线丛书》的一部分。

他还在此论坛上回答了问题,因此,这将比我提供的第二手/第三手信息更好。


5

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

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

这就是为什么默认情况下t-log不会被截断/缩小的原因,因为它们是备份阶段事务连续性的重要组成部分。


1

不要将截断日志与缩小日志混淆。

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

  • 要缩小日志,请减小实际日志文件的大小。这是使用DBCC命令完成的。


1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.