如何为对等事务复制配置冲突检测(复制 Transact-SQL 编程)

对等复制包括对整个拓扑启用冲突检测的选项。有关详细信息,请参阅对等复制中的冲突检测

若要使用冲突检测,所有节点都必须运行 SQL Server 2008 或更高版本,并且必须为所有节点启用检测。在配置拓扑时,或者在配置拓扑之后,可以启用冲突检测。若要针对现有的拓扑启用冲突检测,不必使拓扑静止。但是,如果在为所有节点启用冲突检测之前出现了发生冲突的更改,则复制功能无法保证能够检测到这些冲突。有关如何配置拓扑的详细信息,请参阅如何配置对等事务复制(复制 Transact-SQL 编程)

注意注意

配置对等复制时,可以为每个节点指定一个 ID。此 ID 对于拓扑中的所有节点必须是唯一的,存储于 MSpeer_originatorid_history 系统表的 originator_id 列中。如果从拓扑中删除节点,此 ID 将仍保留在历史记录表中。保留此 ID 是为了防止当存在来自整个拓扑中仍在复制的已删除节点的更改时出现虚假冲突。如果想要对新节点重新使用该 ID,必须首先从所有节点 MSpeer_originatorid_history 表中手动删除该 ID。在删除节点的 ID 之前,请执行 sp_requestpeerresponse 以确保从该节点产生的所有更改都已复制。

在配置拓扑的过程中启用冲突检测

  • 在每个节点上使用 sp_addpublication 创建发布时:

    • @p2p_conflictdetection 的值指定为 true。

    • @p2p_originator_id 指定一个非零正整数。此 ID 绝不能是在拓扑中使用过的值。若要获得已经用过的 ID 的列表,请执行 sp_help_peerconflictdetection

    • @p2p_continue_onconflict 指定一个值。我们建议您将值指定为 false。有关详细信息,请参阅对等复制中的冲突检测中的“处理冲突”。

在配置拓扑之后启用冲突检测

  1. 这些步骤假设拓扑由以下三个节点组成:A、B 和 C。在节点 A 上,执行 sp_configure_peerconflictdetection

    • @publication 的值指定为发布名称,将 @action 的值指定为 enable。

    • @p2p_originator_id 指定一个非零正整数。此 ID 绝不能是在拓扑中使用过的值。若要获得已经用过的 ID 的列表,请执行 sp_help_peerconflictdetection

    • @continue_onconflict 指定一个值。我们建议您将值指定为 false。有关详细信息,请参阅对等复制中的冲突检测中的“处理冲突”。

  2. 对于节点 B 和节点 C,重复步骤 1。

  3. 从某个节点执行 sp_help_peerconflictdetection;将 @publication 的值指定为发布名称。检查结果集,确保针对所有的节点都启用了冲突检测,并且每个节点都有一个唯一的发起方 ID 值。

禁用冲突检测