我一直在阅读有关 SQL Server 中日志备份的 Microsoft 文档,并发现以下声明:
(日志备份)指定仅备份事务日志。日志从上次成功执行的日志备份开始备份到当前日志末尾。在创建第一个日志备份之前,您必须创建完整备份。”
由此我了解到,日志备份是备份上次日志备份以来的日志记录。但是,我也知道差异备份和完整备份也包含一些日志记录。这引出了我的问题:
日志备份是否还包括之前的完整备份或差异备份中备份的日志记录?或者日志备份是否严格备份从上次日志备份开始的日志记录,完整备份或差异备份不会干扰或影响后续日志备份中备份的内容?
任何见解将不胜感激。提前致谢!
完整备份和差异备份都包含将数据页复制到备份介质期间生成的日志记录。即,当备份开始时,执行检查点。这是数据页复制阶段。在此阶段可以生成日志记录(修改在数据库中完成)。在此数据复制阶段之后,自上一个检查点以来生成的那些日志记录也将写入备份介质。如果您比较挑剔,可能还不止于此: SQL Server 日志备份是否包括在之前的完整备份或差异备份中备份的日志记录?
日志备份还将包含上述日志记录。这就是为什么您可以“跳过”恢复完整备份或差异备份。您所需要的只是一个不间断的日志备份链。假设您有这些备份:
您可以通过以下方式恢复:
除非这些日志备份包含所有日志记录,否则上述情况是不可能的。即,它们形成不间断的日志备份链(包含不间断的日志记录链)。
你的说法不太正确:
完整备份
完整备份仅包含事务日志的一小部分,以便 SQL Server 可以创建由 *.MDF 文件和 *.LDF 文件组成的数据库。
参考: 完整数据库备份 (SQL Server) (Microsoft Learn | SQL)
您可以使用以下命令查看备份文件的内容:
这将返回定义数据库的文件列表。
差速器杯
差异备份仅包含自上次完整备份以来数据库中修改的[范围]。备份过程扫描数据库文件 *.mdf 和构成数据库的任何其他 *.ndf 文件的范围(8 页 = 1 个范围;1 页 = 8 kb 数据),其中包含页面已更改的标记自上次备份以来。
和...
参考: 差异备份 (SQL Server) (Microsoft Learn | SQL)
与您的理解相反,差异备份不包含事务日志的一部分。
这是差异备份内容的图片:
事务日志备份
事务日志备份是事务日志文件的备份,其中包含自上次完整备份(初始 TLOG 备份)或自上次事务日志备份以来在数据库中所做的事务和修改。它本质上是一系列修改。
参考: SQL Server 事务日志架构和管理指南(Microsoft Learn | SQL)
因此,事务日志备份是针对数据库执行的事务和修改的副本。
回答您的问题
某种程度上,事务日志备份包含上次完整备份之后/期间所做的所有修改。全量备份中的事务日志备份只是为了方便数据库的恢复(创建*.mdf和*.ldf文件)并使数据库进入一致状态。差异备份不会影响事务日志备份。
在您进行初始完整备份后,是的。
让我解释
如果您有以下备份链:
F = 完整 D = 差异 L = 事务日志备份
...然后您可以使用星期一的完整备份 (F) 和直至 X 的所有事务日志备份 (L) 将数据库恢复到星期五标有 X 的位置。
或者,您可以使用周一的完整备份 (F) 和周三的差异备份 (D) 以及周五之前的所有事务日志备份 (L) 来到达位置 X。
我在对问题如何判断备份日志链是否损坏? 的回答中发布了一个示例。
本质上,它可以归结为:如果您有一个不间断的事务日志备份链,直到给定点并以完整备份为基础,那么您可以恢复到该链上的任何点,因为事务日志备份包含所有事务和修改自上次事务日志备份或初始完整备份以来。