我刚刚阅读了很多MSDN文档,我想我理解不同的恢复模式和备份链的概念。 我还有一个问题:
完整的数据库备份是否会截断事务日志(使用完全恢复模式)?
如果是的话:MSDN中提到了哪里? 所有我能find的是只有BACKUP LOG截断日志。
如果不是:为什么? 由于完整的数据库备份启动了一个新的备份链,因此在完整备份激活之前保持事务处于活动状态的关键是什么?
没有 – 它绝对不是。 唯一允许日志在FULL或BULK_LOGGED恢复模式中清除/截断的是日志备份 – 没有例外。 我早就有了这个观点,并且发表了一篇长篇详细的博客文章,上面有一个解释和一个脚本,你可以用它来certificate自己在围绕日志和日志备份的误解:如何说服自己 。
随时跟进更多的问题。 顺便说一句 – 另请参阅我为TechNet杂志撰写的关于了解SQL Server中的日志logging和恢复的文章 。
谢谢
完整备份不会截断日志,您必须执行备份日志操作。 完整的备份不会重新设置日志链 – 这将完全搞砸复制/日志传送等。
您必须仔细研究SQL Server如何备份,但知道备份中不包含正在运行/长时间运行的事务(否则备份可能永远不会完成),所以说完全备份在线数据库保证使下一个日志备份过时。
根据我的理解,截断事务日志的唯一事情就是日志备份 。
完整备份只复制足够的日志,以使其在事务上一致,因为备份操作需要一段时间才能完成,在此期间,复制的页面可能已更改。
您仍然需要您的日志备份来进行时间点恢复。
我没有MSDN链接,但我可以链接到Paul Randal的博客 ,他是SQL Server团队的开发人员,编写了DBCC CHECKDB和部分Books Online。
他也回答了这个论坛上的问题,所以这将是一个更好的权威,然后从我的第二/第三手资料:)
人们经常对完整的备份和日志备份有一个误解。 为了使备份在FULL
备份恢复模式下工作,必须使用t日志,因为在备份过程中,数据库中可能还有事务正在进行(除非在closures数据库时执行所谓的COLD
备份)。 在ARCHIVELOG
模式下使用数据库时,Oracle使用相同的概念。 备份的顺序归结为:
这就是为什么t日志不被默认截断/缩小的原因,因为它们是备份阶段中事务延续的重要组成部分。
不要混淆截断日志与收缩日志。
TRUNCATE是删除日志中最后一个检查点之前的事务(检查点是当事务刷新到数据库本身时)。 这是使用BACKUP命令完成的。
收缩日志是为了减less实际的日志文件大小。 这是使用DBCC命令完成的。
基本上,你不需要每次都自动收缩事务日志,因为事务日志需要空间来工作,如果你自动截断,它将保持几乎相同的大小。