差异备份 (SQL Server)

此备份和还原主题适用于所有 SQL Server 数据库。

差异备份基于最近一次完整数据备份。 差异备份仅捕获自该完整备份以来已更改的数据。 差异备份所基于的完整备份称为基础备份。 完整备份(仅复制备份除外)可用作一系列差异备份的基础,包括数据库备份、部分备份和文件备份。 文件差异备份的基本备份可以包含在完整备份、文件备份或部分备份中。

优点

  • 与创建完整备份相比,创建差异备份的速度可能非常快。 差异备份只记录自完整备份以来已更改的数据。 这有助于频繁执行数据备份,从而降低数据丢失的风险。 但是,在还原差异备份之前,必须还原其基础备份。 因此,从差异备份还原时,必须进行比从完整备份还原更多的步骤,并花费更多时间,因为需要使用两个备份文件。

  • 如果数据库子集的修改频率高于数据库的其余部分,差异数据库备份尤其有用。 在这些情况下,差异数据库备份使你能够频繁备份,而不会造成完整数据库备份的开销。

  • 在完整恢复模式下,使用差异备份可以减少必须还原的日志备份数。

差异备份概述

差异备份捕获自创建差异基以来至创建差异备份期间,发生更改的任何 盘区(8 个物理连续页的集合)的状态。 这意味着给定差异备份的大小取决于自基数以来已更改的数据量。 通常情况下,基础文件越旧,新的差异备份就越大。 在一系列差异备份中,经常更新的区可能包含每个差异备份中的不同数据。

下图显示了差异备份的工作原理。 该图显示 24 个数据区,其中 6 个数据区已更改。 差异备份仅包含这 6 个数据区。 差异备份作依赖于位图页,该位页包含每个区一点。 对于自基线以来更新的每个区块,位在位图中设置为 1。

差异位图标识已更改盘区,

注释

差异位图不会通过仅限于复制的备份进行更新。 因此,仅复制备份不会影响后续差异备份。

一个差异备份,如果在其基础之后不久进行,通常会比差异基础小得多。 这样可以节省存储空间和备份时间。 但是,随着数据库随时间的变化,数据库和特定差异基数之间的差异会增加。 差异备份的时间与其基础之间的间隔越长,差异备份的尺寸就可能越大。 这意味着差异备份最终可以接近差异基本大小。 大型差异备份会失去更快、更小的备份的优点。

随着差异备份的大小增加,还原差异备份可以显著增加还原数据库所需的时间。 因此,建议按照设置间隔执行新的完整备份,为数据建立新的差异基础。 例如,可以执行整个数据库的每周完整备份(即完整数据库备份),然后是一周中的常规差异数据库备份。

在还原时,在还原差异备份之前,必须还原基础备份。 然后,仅还原最新的差异备份,以将数据库转发到创建差异备份的时间。 通常,还原最新的完整备份,后跟基于该完整备份的最新差异备份。

具有 Memory-Optimized 表的数据库差异备份

有关具有内存优化表的差异备份和数据库的信息,请参阅 备份具有 Memory-Optimized 表的数据库

Read-Only 数据库的差异备份

对于只读数据库,单独使用的完整备份比与差异备份一起使用时更容易管理。 当数据库为只读时,备份和其他作无法更改文件中包含的元数据。 因此,差异备份所需的元数据(例如差异备份开始的日志序列号(差异基 LSN)存储在 master 数据库中。 如果在数据库为只读时生成差异基数,则差异位图显示自基础备份以来发生的更改数多于实际发生的更改数。 额外的数据是通过备份读取的,但不会写入备份,因为存储在备份集系统表中的differential_base_lsn用于确定自基数据以来是否已实际更改。

重新生成、还原或分离和附加只读数据库时,差异基信息将丢失。 之所以发生这种情况,是因为 master 数据库未与用户数据库同步。 SQL Server 数据库引擎无法检测或阻止此问题。 以后的任何差异备份不基于最新的完整备份,并且可能会提供意外的结果。 若要建立新的差异基础,建议创建完整的数据库备份。

使用 Read-Only 数据库进行差异备份的最佳实践

创建只读数据库的完整数据库备份后,如果要创建后续差异备份,请备份 master 数据库。

如果 master 数据库丢失,请先还原该数据库,然后再还原用户数据库的任何差异备份。

如果分离并附加了计划稍后使用差异备份的只读数据库,一旦可行,请对只读数据库和 master 数据库执行完整数据库备份。

相关任务

另请参阅

备份概述 (SQL Server)
完整数据库备份 (SQL Server)
完整数据库还原(完整恢复模式)
完整数据库还原(简单恢复模式)
事务日志备份 (SQL Server)