备份和还原快照和事务复制的策略

为快照和事务复制设计备份和还原策略时,需要考虑以下三个方面:

  • 要备份的数据库。

  • 事务复制的备份设置。

  • 还原数据库所需的步骤。 这些取决于选择的复制类型和选项。

本主题将在接下来的三个部分中介绍其中每个区域。 有关 Oracle 发布的备份和还原的信息,请参阅 Oracle 发布服务器的备份和还原

备份数据库

对于快照和事务复制,您需要定期备份以下数据库:

  • 出版商处的出版物数据库。

  • 分发服务器上的分发数据库。

  • 每个订阅者的订阅数据库。

  • 发布服务器、分发服务器和所有订阅服务器上的 mastermsdb 系统数据库。 应同时备份这些数据库以及相关的复制数据库。 例如,在备份发布数据库的同时,在发布服务器上备份 master 数据库和 msdb 数据库。 如果还原发布数据库,请确保 mastermsdb 数据库在复制配置和设置方面与发布数据库保持一致。

如果执行常规日志备份,则应在日志备份中捕获与复制相关的任何更改。 如果不执行日志备份,则每当更改与复制相关的设置时,都应执行备份。 有关详细信息,请参阅 需要更新备份的常见操作

事务复制的备份设置

事务复制包括将 同步与备份选项结合使用 ,该选项可在分发数据库和发布数据库上设置:

  • 建议始终在分发数据库上设置此选项。

    在分发数据库中设置此选项可确保发布数据库中的事务日志在分发数据库完成备份之前不会被截断。 分发数据库可以还原到最后一个备份,并且任何缺失的事务都将从发布数据库传递到分发数据库。 复制将继续不受影响。

    对分发数据库设置此选项不会影响复制延迟。 但是,该选项会延迟发布数据库中日志的截断,直到分发数据库中相应事务被备份完成。 (这可以在发布数据库中创建更大的事务日志。

  • 如果应用程序可以容忍额外的延迟,建议对发布数据库设置此选项。

    对发布数据库设置此选项可以确保事务在发布数据库上备份之前不会传递到分发数据库。 因此,可以在发布服务器上还原最新一次的发布数据库备份,这样就不会出现分发数据库中有的事务,而还原后的发布数据库没有的情况。

    延迟和吞吐量受到影响,因为在发布服务器上备份事务之前,事务无法传送到分发数据库。 例如,如果事务日志每 5 分钟备份一次,则发布服务器上提交事务以及将事务传送到分发数据库(随后是订阅服务器)之间还有 5 分钟的延迟。

    注释

    与备份选项的同步可确保发布数据库和分发数据库之间的一致性,但该选项不保证数据丢失。 例如,如果事务日志丢失,则自上次事务日志备份以来提交的事务在发布数据库或分发数据库中将不可用。 这与非重复数据库的行为相同。

设置与备份选项的同步

还原涉及复制的数据库

如果最近的备份可用且遵循相应的步骤,则可以还原复制拓扑中的所有数据库。 发布数据库的还原步骤取决于复制的类型和所使用的选项;但是,所有其他数据库的还原步骤独立于类型和选项。

复制支持将复制的数据库还原到创建备份的同一服务器和数据库。 如果将复制数据库的备份还原到另一个服务器或数据库,则无法保留复制设置。 在这种情况下,必须在还原备份后重新创建所有发布和订阅。

发布者

为以下类型的复制提供了还原步骤:

  • 快照复制

  • 只读事务复制

  • 使用更新订阅进行事务复制

  • 对等事务复制

本节中还介绍的 msdbmaster 数据库的还原对于所有四种类型都是相同的。

发布数据库:快照复制

  1. 还原发布数据库的最新备份。 转到步骤 2。

  2. 发布数据库备份是否包含所有发布和订阅的最新配置? 如果是,则还原已完成。 如果没有,请转到步骤 3。

  3. 从发布服务器、分发服务器和订阅服务器中删除复制配置,然后重新创建配置。 还原已完成。

    有关如何删除复制的详细信息,请参阅sp_removedbreplication(Transact-SQL)。

发布数据库:Read-Only 事务复制

  1. 还原出版数据库的最新备份。 转到步骤 2。

  2. 在失败之前,是否已在发布数据库上启用 与备份 设置的同步? 如果是,请转到步骤 3;如果没有,请转到步骤 5。

    如果启用此设置,查询 SELECT DATABASEPROPERTYEX('<PublicationDatabaseName>', 'IsSyncWithBackup') 将返回“1”。

  3. 还原的备份是否已完成及up-to日期? 它是否包含所有发布和订阅内容的最新配置? 如果是,则还原已完成。 如果没有,请转到步骤 4。

  4. 还原的发布数据库中的配置信息不是 up-to-date。 因此,必须确保订阅者在分发数据库中拥有所有未完成的命令,然后删除并重新创建复制配置。

    1. 运行分发代理,直到所有订阅服务器与分发数据库中未完成的命令同步。 使用复制监视器中的 “未分发命令 ”选项卡或在分发数据库中查询 MSdistribution_status 视图,验证所有命令是否已传递到订阅服务器。 转到步骤 b。

      有关如何运行分发代理的详细信息,请参阅 启动和停止复制代理(SQL Server Management Studio)复制代理可执行文件概念

      有关如何验证命令的详细信息,请参阅 “查看分发数据库中的复制命令和其他信息”(复制 Transact-SQL 编程), 以及 使用复制监视器查看信息和执行任务

    2. 从发布服务器、分发服务器和订阅服务器中删除复制配置,然后重新创建配置。 重新创建订阅时,请指定订户已经拥有数据。 还原已完成。

      有关如何删除复制的详细信息,请参阅sp_removedbreplication(Transact-SQL)。

      有关如何指定订阅者已拥有数据的详细信息,请参阅 手动初始化订阅

  5. 未在发布数据库上设置 与备份 选项的同步。 因此,还原备份中未包含的事务可能已传递到分发服务器和订阅服务器。 现在你必须确保订阅者已在分发数据库中处理所有未完成的命令,然后手动将那些未包含在还原的备份中的事务应用到发布数据库。

    重要

    执行此过程可能会导致已发布表还原到比从备份还原的其他非发布表的时间点最近的时间点。

    1. 运行分发代理,直到所有订阅者与分发数据库中的待处理命令同步。 使用复制监视器中的 “未分发命令 ”选项卡或在分发数据库中查询 MSdistribution_status 视图,验证所有命令是否已传递到订阅服务器。 转到步骤 b。

      有关如何运行分发代理的详细信息,请参阅 启动和停止复制代理(SQL Server Management Studio)复制代理可执行文件概念

      有关如何验证命令的详细信息,请参阅 “查看分发数据库中的复制命令和其他信息”(复制 Transact-SQL 编程), 以及 使用复制监视器查看信息和执行任务

    2. 使用 表差异工具 或其他工具手动将发布者与订阅者同步。 这使您能够从未包含在发布数据库备份中的订阅数据库中恢复数据。 转到步骤 c.

      有关表差异实用工具的详细信息,请参阅“比较复制表的差异”(复制编程)。

    3. 还原的备份是否已完成,并且属于 up-to版本? 它是否包含所有发布和订阅的最新配置? 如果是,请执行 sp_replrestart 存储过程,以将发布服务器的元数据与分发服务器的元数据重新同步。 还原已完成。 如果没有,请转到步骤 d。

    4. 从发布服务器、分发服务器和订阅服务器中删除复制配置,然后重新创建配置。 重新创建订阅时,请指定订阅方已具有数据。 还原已完成。

      有关如何删除复制的详细信息,请参阅sp_removedbreplication(Transact-SQL)。

      有关如何指定订阅方已拥有数据的更多信息,请参阅 手动初始化订阅

发布的数据库:事务性的复制与更新性订阅

  1. 还原发布数据库的最新备份。 转到步骤 2。

  2. 运行分发代理,直到所有订阅服务器与分发数据库中未完成的命令同步。 使用复制监视器中的 “未分发命令 ”选项卡或在分发数据库中查询 MSdistribution_status 视图,验证所有命令是否已传递到订阅服务器。 转到步骤 3。

    有关如何运行分发代理的详细信息,请参阅 启动和停止复制代理(SQL Server Management Studio)复制代理可执行文件概念

    有关如何验证命令的详细信息,请参阅 “查看分发数据库中的复制命令和其他信息”(复制 Transact-SQL 编程), 以及 使用复制监视器查看信息和执行任务

  3. 如果使用排队更新订阅,请连接到每个订阅者,并删除订阅数据库中 MSreplication_queue(Transact-SQL) 表的所有行。 转到步骤 4。

    注释

    如果您使用队列更新订阅,并且任何表格包含标识列,则必须确保在还原后分配正确的标识范围。 有关详细信息,请参阅 “复制标识列”。

  4. 现在必须确保订阅方在分发数据库中拥有所有未完成的命令,然后手动将任何未包含在还原的备份中的事务应用于发布数据库。

    重要

    执行此过程可能会导致已发布表还原到比从备份还原的其他非发布表的时间点最近的时间点。

    1. 运行分发代理,直到所有订阅者与分发数据库中的未处理命令同步。 使用复制监视器或通过查询分发数据库中 的MSdistribution_status 视图,验证所有命令是否已传递到订阅服务器。 转到步骤 b。

    2. 使用 tablediff Utility 或其他工具手动将发布者与订阅者同步。 这样,您便可以从未包含在发布数据库备份中的订阅数据库中恢复数据。 转到步骤 c.

      有关表差异实用工具的详细信息,请参阅“比较复制表的差异”(复制编程)。

    3. 恢复的备份是否完整并且更新至 up-to日期? 它是否包含所有发布和订阅的最新配置? 如果是,请执行 sp_replrestart 存储过程,以重新同步发布服务器元数据与分发服务器元数据。 还原已完成。 如果没有,请转到步骤 d。

    4. 从发布服务器、分发服务器和订阅服务器中删除复制配置,然后重新创建配置。 重新创建订阅时,请指定订阅者已经有数据。 还原已完成。

      有关如何删除复制的详细信息,请参阅和 sp_removedbreplication (Transact-SQL)

      有关如何指定订阅者已有数据的详细信息,请参阅 如何手动初始化订阅

发布数据库系统:点对点事务复制

在以下步骤中,发布数据库 ABC 位于对等事务复制拓扑中。 数据库 AC 联机且正常运行;数据库 B 是要还原的数据库。 此处介绍的过程(尤其是步骤 7、10 和 11)与将节点添加到对等拓扑所需的过程非常相似。 执行这些步骤的最简单方法是使用“配置对等拓扑向导”,但也可以通过使用存储过程来实现。

  1. 运行分发代理以同步数据库 AC 上的订阅。转到步骤 2。

    有关如何运行分发代理的详细信息,请参阅 启动和停止复制代理(SQL Server Management Studio)复制代理可执行文件概念

  2. 如果 B 使用的分发数据库仍然可用,请运行分发代理以同步数据库 BA 和数据库与 B 和 C 之间的订阅。转到步骤 3。

  3. 通过在 B 的分发数据库上执行 sp_removedistpublisherdbreplication,删除 B 使用的分发数据库中的元数据。转到步骤 4。

  4. 在数据库 AC 上,将订阅删除到数据库 B 的发布。转到步骤 5。

    有关如何删除订阅的详细信息,请参阅 “订阅发布”。

  5. 执行数据库 A 的日志备份或完整备份。转到步骤 6。

  6. 还原数据库 B 上的数据库 A 的备份。数据库 B 现在具有数据库 A 中的数据,但不包含复制配置。 将备份还原到另一台服务器时,将删除复制;因此,复制已从数据库 B 中删除。转到步骤 7。

  7. 在数据库 B 上重新创建发布,然后在数据库 AB 之间重新创建订阅。(涉及数据库 C 的订阅将在后面的阶段进行处理)。

    1. 在数据库 B 上重新创建发布。转到步骤 b。

    2. 在数据库 B 中重新创建订阅,以便连接到数据库 A 的发布处,并指定订阅应使用备份进行初始化(即在 sp_addsubscription@sync_type 参数中设置备份进行初始化的值)。 转到步骤 c.

    3. 在数据库 A 上重新创建订阅,通过指定数据库 B 的发布来执行该操作,需指明订阅服务器已经具有数据(对于 sp_addsubscription@sync_type 参数,使用值 仅限复制支持)。 转到步骤 8。

  8. 运行分发代理以同步数据库 AB 上的订阅。如果已发布的表中有任何标识列,请转到步骤 9。 如果没有,请转到步骤 10。

  9. 还原后,为数据库 A 中的每个表分配的标识范围也将用于数据库 B。确保还原的数据库 B 已收到从已传播到数据库 A 和数据库 C 的失败数据库 B 的所有更改;然后重新分配每个表的标识范围。

    1. 在数据库 B 处执行sp_requestpeerresponse并检索输出参数@request_id。 转到步骤 b。

    2. 默认情况下,分发代理设置为连续运行;因此,应自动将令牌发送到所有节点。 如果分发代理未在连续模式下运行,请运行代理。 有关详细信息,请参阅复制代理可执行文件概念启动和停止复制代理(SQL Server Management Studio)。 转到步骤 c.

    3. 执行 sp_helppeerresponses,提供在步骤 b 中检索的 @request_id 值。 请等待,直到所有的节点指示它们已收到对等请求。 转到步骤 d。

    4. 使用 DBCC CHECKIDENT 重新分配数据库 B 中的每个表,以确保使用了适当的范围。 转到步骤 10。

    有关如何管理标识范围的详细信息,请参阅 复制标识列的“手动标识范围管理分配范围”部分。

  10. 此时,数据库 B 和数据库 C 不直接连接,但它们将通过数据库 A 接收更改。如果拓扑包含运行 SQL Server 2005 的任何节点,请转到步骤 11;否则,请转到步骤 12。

  11. 使系统处于静止状态,然后在数据库 BC 之间重新创建订阅。使系统处于静止状态涉及停止所有节点上已发布表上的活动,并确保每个节点已经接收到来自所有其他节点的所有更改。

    1. 停止所有在点对点拓扑中已发布表上的操作。 转到步骤 b。

    2. 在数据库 B 处执行sp_requestpeerresponse并检索输出参数@request_id。 转到步骤 c.

    3. 默认情况下,分发代理设置为连续运行;因此,应自动将令牌发送到所有节点。 如果分发代理未在连续模式下运行,请运行代理。 转到步骤 d。

    4. 执行 sp_helppeerresponses,提供在步骤 b 中检索的 @request_id 值。 等待所有节点确认它们已收到对等请求。 转到步骤 e.

    5. 将数据库 B 上的订阅重新创建到数据库 C 上的发布,并指定订阅服务器已有数据。 转到步骤 b。

    6. 在数据库 C 重新创建到数据库 B 发布的订阅,指定订阅者已具备数据。 转到步骤 13。

  12. 在数据库 BC 之间重新创建订阅:

    1. 在数据库 B 中,查询 MSpeer_lsns 表以检索数据库 B 从数据库 C 接收的最新事务的日志序列号(LSN)。

    2. 在数据库 B 处重新创建订阅到数据库 C 上的发布,指定应基于 LSN 初始化订阅(sp_addsubscription@sync_type参数的 lsn初始化值)。 转到步骤 b。

    3. 重新创建数据库 C 的订阅到数据库 B 的发布,强调订阅方已经拥有数据。 转到步骤 13。

  13. 运行分发代理以同步数据库 BC 上的订阅。还原已完成。

msdb 数据库 (发布服务器)

  1. 还原 msdb 数据库的最新备份。

  2. 还原的备份文件是否完整,并附有 up-to日期? 它是否包含所有发布和订阅的最新配置? 如果是,则恢复已完成。 如果没有,请转到步骤 3。

  3. 从复制脚本中重新创建订阅清理操作。 恢复已完成。

master 数据库(发布服务器)

  1. 还原 master 数据库的最新备份。

  2. 确保数据库与发布数据库在复制配置和设置方面保持一致。

分发服务器上的数据库

分发数据库

  1. 还原分发数据库的最新备份。

  2. 在发生故障之前,是否已在分发数据库上启用 与备份 设置的同步? 如果是,请转到步骤 3;如果没有,请转到步骤 4。

    如果启用此设置,查询 SELECT DATABASEPROPERTYEX('<DistributionDatabaseName>', 'IsSyncWithBackup') 将返回“1”。

  3. 还原的备份是否已完成并包含up-to日期? 它是否包含所有出版物和订阅内容的最新配置? 如果是,则恢复已完成。 如果没有,请转到步骤 4。

  4. 还原的分发数据库中的配置信息不是 up-to-date,或者未在分发数据库上设置 与备份 选项的同步。 (还原后,分发数据库可能缺少在发布服务器上提交的但尚未传递到订阅服务器的事务。删除并重新创建复制,然后运行验证。

    1. 从发布服务器、分发服务器和订阅服务器中删除复制配置,然后重新创建配置。 重新创建订阅时,请指定订阅方已具有数据。 转到步骤 b。

      有关如何删除复制的详细信息,请参阅sp_removedbreplication(Transact-SQL)。

      有关如何指明订阅者已经拥有数据的详细信息,请参阅 手动初始化订阅

    2. 标记所有发布以进行验证。 重新初始化任何未通过验证的订阅。 恢复已完成。

      有关验证的详细信息,请参阅 “验证复制的数据”。 有关重新初始化的详细信息,请参阅 重新初始化订阅

msdb 数据库 (分发服务器)

  1. 还原 msdb 数据库的最新备份。

  2. 还原的备份是否已完成并更新到 up-to日期? 它是否包含所有发布和订阅的最新配置? 如果是,则恢复已完成。 如果没有,请转到步骤 3。

  3. 从发布服务器、分发服务器和订阅服务器中删除复制配置,然后重新创建配置。 重新创建订阅时,请指定订阅者已拥有数据。 转到步骤 4。

    有关如何删除复制的详细信息,请参阅sp_removedbreplication(Transact-SQL)。

    有关如何指定订阅者已经拥有数据的详细信息,请参阅 手动初始化订阅

  4. 标记所有出版物进行验证。 重新初始化任何未通过验证的订阅。 恢复已完成。

    有关验证的详细信息,请参阅 “验证复制的数据”。 有关重新初始化的详细信息,请参阅 重新初始化订阅

master 数据库 (分发服务器)

  1. 还原 master 数据库的最新备份。

  2. 确保数据库与发布数据库在复制配置和设置方面保持一致。

订阅服务器上的数据库

订阅数据库

  1. 最新的订阅数据库备份是否比分发数据库的最低分发保留期设置更晚? (这决定了分发者是否仍然拥有将订阅者 up-to日期所需的所有命令。)如果是,请转到步骤 2。 如果没有,请重新初始化订阅。 恢复已完成。

    若要确定最大分布保留设置,请执行 sp_helpdistributiondb 并从 max_distretention 列中检索值(此值为小时)。

    有关如何重新初始化订阅的详细信息,请参阅 重新初始化订阅

  2. 还原最新的订阅数据库备份。 转到步骤 3。

  3. 如果订阅数据库仅包含推送订阅,请转到步骤 4。 如果订阅数据库包含任何请求订阅,请问以下问题:订阅信息是否是最新的? 数据库是否包括失败时设置的所有表和选项。 如果是,请转到步骤 4。 如果没有,请重新初始化订阅。 恢复已完成。

  4. 若要同步订阅方,请运行分发代理程序。 恢复已完成。

    有关如何运行分发代理的详细信息,请参阅 启动和停止复制代理(SQL Server Management Studio)复制代理可执行文件概念

msdb 数据库 (订阅方)

  1. 还原 msdb 数据库的最新备份。 请求订阅是否在此订阅服务器上使用? 如果没有,则还原已完成。 如果是,请转到步骤 2。

  2. 还原的备份是否已完成,up-to日期? 它是否包含所有拉取订阅的最新配置? 如果是,则恢复已完成。 如果没有,请转到步骤 3。

  3. 删除并重新创建拉取订阅。 重新创建订阅时,请指定订户已经拥有数据。 还原已完成。

    有关如何删除订阅的详细信息,请参阅 “订阅发布”。

    有关如何指定订阅者已经拥有数据的详细信息,请参阅 手动初始化订阅

主数据库(订阅者)

  1. 还原 master 数据库的最新备份。

  2. 确保数据库与发布数据库在复制配置和设置方面保持一致。

另请参阅

SQL Server 数据库的备份和还原
备份和还原复制的数据库
配置分发
发布数据和数据库对象
订阅刊物
初始化订阅
同步数据