如何配置对等事务复制 (SQL Server Management Studio)

本主题说明如何使用配置对等拓扑向导来配置和维护对等复制拓扑。 本主题首先介绍如何使用此向导创建一个由三个节点组成的拓扑,然后说明如何添加和删除节点及节点之间的连接。 在 SQL Server 2008 和更高版本的 SQL Server 中,当系统中有活动发生时可以添加和连接节点。 如果拓扑中包含 SQL Server 2005 节点,您可以将新节点连接到一个现有节点,但若要连接到多个节点,您必须停止系统。 为了停止系统,需要停止所有节点上已发布表的操作,并确保每个节点都已收到来自所有其他节点的所有更改。 本主题的最后一部分详细介绍了此过程。

创建对等复制拓扑

以下步骤概述了如何创建包含如下三个节点的拓扑:Server AServer BServer C。本部分详细介绍了每个步骤。

  1. 确保每个节点上都在运行 SQL Server 代理,并确保在配置拓扑后运行日志读取器代理和分发代理。 有关 SQL Server 代理的信息,请参阅启动 SQL Server 代理;有关如何启动和停止代理的信息,请参阅如何启动和停止复制代理 (SQL Server Management Studio)

  2. Server AServer BServer C 上配置分发。

    可以使用本地分发服务器,也可以使用远程分发服务器。 如果使用远程分发服务器,建议您不要为所有节点使用同一个远程分发服务器,因为这样可能会导致单点故障。 有关分发服务器的详细信息,请参阅复制发布模型概述

  3. 使用新建发布向导在 Server A 上创建一个发布。

  4. 在**“发布属性 - <发布>”**对话框中为对等复制启用此发布。

  5. 手动或通过将 Server A 上的数据库还原到 Server BServer C 来初始化 Server BServer C 上的架构和数据。 所有节点上的架构必须相同。

  6. 使用配置对等拓扑向导将 Server BServer C 添加到拓扑中。 添加服务器:在每台服务器上都创建一个发布,并创建对拓扑中其他服务器上的发布的订阅。

    如果发布的表中有标识列,则必须在 Server BServer C 上重设表的标识范围种子。

为每个节点配置分发

  1. 在 SQL Server Management Studio 中连接到 Server A。必须对 Server BServer C 重复执行此配置过程。

  2. 展开服务器节点,右键单击**“复制”文件夹,再单击“配置分发”**。

  3. 在配置分发向导的**“分发服务器”**页上,选择分发服务器。

    若要使用本地分发服务器,请选择**“‘<服务器名称>’将充当自己的分发服务器;SQL Server 将创建分发数据库和日志”。 若要使用远程分发服务器,请选择“使用以下服务器作为分发服务器”**,再选择一个服务器。 该服务器必须已配置为分发服务器,并且启用发布服务器使用此分发服务器。 有关详细信息,请参阅如何在分发服务器上启用远程发布服务器 (SQL Server Management Studio)

    如果选择远程分发服务器,必须在**“管理密码”**页上输入 Server A 连接到该分发服务器时所用的密码。 此密码必须是在远程分发服务器上将 Server A 启用为发布服务器时指定的密码。

  4. 在**“快照文件夹”**页上,指定快照文件夹。

    此快照文件夹只是一个您已指定为共享的目录。 读取此文件夹内容和向此文件夹写入内容的代理必须拥有访问它所需的足够权限。 此目录存储在第一个节点执行复制所需的对象。 在其他节点执行对等复制时不使用此目录,但在配置分发服务器时仍需要此目录。 有关如何采取适当措施保护此文件夹的安全的详细信息,请参阅保护快照文件夹的安全

  5. 在**“分发数据库”**页上,指定分发数据库的名称。

    分发数据库存储事务、元数据和历史数据。

  6. 在**“发布服务器”**页上,可以允许其他发布服务器将 Server A 用作远程分发服务器。

    如果允许其他发布服务器将 Server A 用作远程分发服务器,则必须在**“分发服务器密码”**页上输入发布服务器连接到分发服务器时所用的密码。

  7. 在“向导操作”页上,根据需要编写配置设置的脚本。 有关详细信息,请参阅编写复制脚本

在第一个节点上创建发布

  1. 在 SQL Server Management Studio 中连接到 Server A,然后展开服务器节点。

  2. 展开**“复制”文件夹,再右键单击“本地发布”**文件夹。

  3. 单击**“新建发布”**。

  4. 在新建发布向导的**“发布数据库”**页上,选择要发布的数据库。

  5. 在**“发布类型”页上,选择“事务发布”**。

  6. 在**“项目”**页上,选择要发布的数据库对象。

    单击**“项目属性”**,查看并修改项目属性。 下列属性不能更改:

    • 目标对象名称

    • 目标对象所有者

    • 不能将**“<ACTION> 传递格式”选项(其中 ACTION 为 INSERT、UPDATE 或 DELETE)设置为“<ACTION> 语句”“没有列列表的 <ACTION> 语句”**。

  7. 不能在**“筛选表行”**页上定义筛选器,这是因为不支持筛选对等发布。

  8. 在**“快照代理”页上,清除“立即创建快照”**。

  9. 在**“代理安全性”**页上,指定快照代理和日志读取器代理的凭据。

    有关每个代理所需权限的详细信息,请参阅复制代理安全性模式复制安全最佳实践

  10. 在**“向导操作”**页上,根据需要,可以选择为发布编写脚本。 有关详细信息,请参阅编写复制脚本

  11. 在**“完成该向导”**页上,指定发布的名称。 发布名称在整个拓扑上必须相同,原因是配置对等拓扑向导在每个节点上创建发布时使用此名称。

为对等复制启用发布

  1. 展开 Server A 上的**“复制”文件夹,然后展开“本地发布”**文件夹。

  2. 右键单击创建的发布,再单击**“属性”**。

  3. 在**“发布属性 - <发布>”对话框中的“订阅选项”页上,为“允许对等订阅”**属性选择 True 值。

  4. 单击“确定”。

初始化每个节点上的架构和数据

  • 使用以下方式之一初始化 Server BServer C

    • 使用 Integration Services (SSIS)、脚本或其他方法手动将 Server A 上的架构和数据复制到 Server BServer C。 在将 Server BServer C 配置为对等方之前,请确保这些服务器上的架构和数据与 Server A 上的架构和数据相同。

    • 在配置拓扑之前,每个节点上必须存在初始数据。 使用 SQL Server 备份和还原功能在拓扑中的每个节点上初始化发布的数据。 备份源应该是配置的第一个节点,在本例中为 Server A。必须在创建 Server A 上的发布并为对等复制启用它后进行备份。 本主题假定在添加所有节点前任何新节点上均未发生活动;因此您可以使用同一备份来初始化每个节点。

      如果在添加所有节点前确有新节点上发生活动,则必须在添加每个节点并将其与 Server A 至少同步一次后进行新的备份。这样可确保从 Server A 备份的数据包含有关所有其他节点的元数据。 例如,如果在 Server BServer C 上发生活动的情况下添加这两个节点,则应执行以下操作:用从 Server A 进行的备份初始化 Server B;配置并同步 Server B;从 Server A 进行新的备份;使用新的备份初始化 Server C;最后配置并同步 Server C

      有关如何备份和还原数据库的详细信息,请参阅在 SQL Server 中备份和还原数据库

      重要说明重要提示

      还原数据库时,请勿指定 KEEP_REPLICATION 选项(对于 Transact-SQL)或“保留复制设置”选项(对于 SQL Server Management Studio)。运行配置对等拓扑向导时,复制会相应配置数据库。

      备份包含完整的数据库,因此每个对等数据库初始化后都包含发布数据库的完整副本。 备份可能包含并未指定为发布项目的表。应由管理员或应用程序在还原备份后删除任何不需要的对象或数据。 在后续同步过程中,只会复制那些应用于指定为项目的表的数据更改。

配置拓扑

  1. 右键单击您在 Server A 上创建的发布,再单击**“配置对等拓扑”。 您可能需要刷新发布节点才能看到“配置对等拓扑”**选项。

  2. 在配置对等拓扑向导的**“发布”**页上,您在 Server A 上创建的发布将处于选定状态。

  3. 在**“配置拓扑”**页上,添加 Server B,然后对 Server C 重复执行此过程:

    1. 右键单击此页的设计图面,再单击**“添加新的对等节点”**。

    2. 在**“连接到服务器”**对话框中,连接到 Server B

    3. 在**“添加新的对等节点”对话框中,选择发布数据库,再选中“连接到所有显示的节点”。 如果冲突检测处于启用状态(默认设置),请在“对等方 ID”**框中为每个节点指定一个唯一值。 此值绝不能是在拓扑中使用过的值。 如需已使用过的 ID 的列表,请查询 Mspeer_originatorid_history 系统表。 有关冲突检测的详细信息,请参阅对等复制中的冲突检测

    4. 单击“确定”。现在,Server B 及其与 Server A 的连接会显示在设计图面上。添加 Server C 后,每个节点都将连接到其他两个节点。

  4. 在**“日志读取器代理安全性”**页上,为每个节点上的日志读取器代理指定凭据。

    有关日志读取器代理所需权限的详细信息,请参阅复制代理安全性模式复制安全最佳实践

  5. 在**“分发代理安全性”**页上,为分发代理(为每个节点的订阅提供服务)指定凭据。

    配置对等拓扑向导创建推送订阅(分发代理在分发服务器上运行),每个订阅都有一个独立的代理。 在三节点拓扑中,每个节点都有其他两个节点的订阅,因此每台分发服务器上都会运行两个分发代理。

    有关分发代理所需权限的详细信息,请参阅复制代理安全性模式复制安全最佳实践

  6. 在**“新对等方初始化”页上,选择“我手动创建了对等数据库或还原了原始发布数据库的备份,该发布数据库自这次备份以来不曾发生更改”**。

  7. 完成向导。 在**“正在生成对等拓扑”**页上,可能会发出一则警告,指示已有 Server A 的日志读取器或发布。 这是信息性警告,无需执行任何操作。

  8. 如果已发布的表中有任何标识列,则在还原之后,您为 Server A 上的表分配的标识范围也将用于 Server BServer C 上的表。您必须使用 DBCC CHECKIDENTServer BServer C 上的表重设种子,以确保它们各自使用不同的范围。

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

向现有拓扑添加运行 SQL Server 2008 或更高版本的节点

向现有拓扑添加运行 SQL Server 2008 或更高版本的节点的过程与在初始配置中包含节点的过程相同。 若要向现有拓扑添加节点,请按下列步骤操作:

  1. Server D 上配置分发。

  2. 通过将 Server A 上的数据库还原到 Server D 来初始化 Server D 上的架构和数据。

  3. 使用配置对等拓扑向导将 Server D 添加到拓扑中。

为新节点配置分发

  • 请参阅本主题中前面部分的“为每个节点配置分发”过程。

初始化新节点

  • Server D 上,还原从 Server A 最新备份的发布数据库。也可以使用从 Server BServer C 备份的数据;但是,在添加 Server D 时,必须在配置对等拓扑向导的**“发布”**页上选择该服务器和数据库。

向拓扑添加节点

  1. 右键单击您在 Server A 上创建的发布,再单击**“配置对等拓扑”**。

  2. 在配置对等拓扑向导的**“发布”**页上,您在 Server A 上创建的发布将处于选定状态。

  3. 在**“配置拓扑”**页面的设计图面上,您将看到 Server AServer BServer C

    1. 右键单击设计图面,再单击**“添加新的对等节点”**。

    2. 在**“连接到服务器”**对话框中,连接到 Server D

    3. 在**“添加新的对等节点”**对话框中,选择发布数据库。

    4. 如果要在所有四个节点之间创建连接,请选中**“连接到所有显示的节点”**。 如果要在部分节点之间手动添加连接,请确保此复选框处于清除状态。

    5. 单击“确定”。

    6. 如果您选中了**“连接到所有显示的节点”,则每个节点都将连接到其他三个节点。 如果您清除了此复选框,请手动添加连接:右键单击一个节点,单击“添加新的对等连接”**,然后将连接箭头拖到另一节点。 对要在 Server D 和其他节点之间建立的每个连接重复执行此过程。

  4. 按照本主题前面部分的“配置拓扑”过程中的说明,完成配置对等拓扑向导。

从拓扑中删除节点

从拓扑中删除节点

  1. 在配置对等拓扑向导的**“配置拓扑”页中,右键单击一个节点,然后单击“删除对等节点”**。

  2. 按照本主题前面部分的“配置拓扑”过程中的说明,完成配置对等拓扑向导。

删除两个节点之间的连接

删除拓扑中节点之间的连接

  1. 在配置对等拓扑向导的**“配置拓扑”页中,右键单击一个节点或设计图面,然后单击“删除对等连接”**。

  2. 按照本主题前面部分的“配置拓扑”过程中的说明,完成配置对等拓扑向导。

隐藏拓扑中的节点

如果拓扑包含很多节点,则隐藏一个或多个节点可能会很有用。 请注意,您只能在设计图面上可见的节点之间添加连接。

隐藏拓扑中的节点

  1. 在配置对等拓扑向导的**“配置拓扑”页中,右键单击一个节点,然后单击“选择要查看的节点”**。

  2. 在**“添加/删除对等方”**对话框中,选择要添加到设计图面或从中删除的节点。

  3. 单击“确定”。

向现有拓扑添加 SQL Server 2005 节点

正如在本主题的简介部分说明的那样,添加 SQL Server 2005 节点和添加运行 SQL Server 更高版本的节点之间的主要区别在于,SQL Server 2005 要求您停止系统才能将新节点连接到所有现有节点。 以下一系列过程分阶段说明如何向现有拓扑添加 SQL Server 2005 节点:

  • 第一阶段包括通过在 Server AServer D 之间创建订阅将 Server D 部分地连接到拓扑。 这样,允许继续在 Server AServer BServer C 上进行更改。 在 Server AServer D 之间创建订阅后,可立即开始在 Server D 上进行更改。 Server BServer C 中的更改通过 Server A 复制到 Server D

  • 第二阶段包括通过在 Server BServer DServer CServer D 之间创建订阅将 Server D 完全连接到拓扑。对于此阶段,您必须停止系统。

    虽然可以不执行第二阶段,但最好执行这一阶段,因为与只有 Server AServer D 之间的一个单一连接相比,这样就具有更强的容错能力。

第一阶段的过程

为新节点配置分发

  • 请参阅本主题中前面部分的“为每个节点配置分发”过程。

初始化新节点

  • Server D 上,还原从 Server A 最新备份的发布数据库。也可以使用从 Server BServer C 备份的数据,但在添加 Server D 时,必须在配置对等拓扑向导的**“发布”**页上选择该服务器和数据库。

向拓扑中添加新节点(在 Server A 和 Server D 之间创建订阅)

  1. 右键单击您在 Server A 上创建的发布,再单击**“配置对等拓扑”**。

  2. 在配置对等拓扑向导的**“发布”**页上,您在 Server A 上创建的发布将处于选定状态。

  3. 在**“配置拓扑”**页面的设计图面上,您将看到 Server AServer BServer C

    1. 右键单击设计图面,再单击**“添加新的对等节点”**。

    2. 在**“连接到服务器”**对话框中,连接到 Server D

    3. 在**“添加新的对等节点”**对话框中,选择发布数据库。

    4. 单击“确定”。

    5. Server AServer D 之间添加连接:右键单击 Server A,单击**“添加新的对等连接”**,然后将连接箭头拖到 Server D 上。

  4. 在**“日志读取器代理安全性”**页上,为 Server D 上的日志读取器代理指定凭据。

  5. 在**“分发代理安全性”**页上,为 Server AServer D 上的分发代理指定凭据。

  6. 在**“新对等方初始化”页上,选择“我还原了原始发布数据库的备份,该发布数据库在这次备份之后已发生更改”**。

    如果选中此选项,则从 Server A 进行的备份中所未包括的所有更改都会传递到 Server D 上还原的数据库中。 为对等复制启用发布时,allow_initialize_from_backup 发布属性设置为 True。 复制立即开始跟踪 Server A 上发布数据库中的更改,这样在还原后,其他对等方就可成为最新状态。

  7. 单击**“浏览”**按钮,定位到所使用的备份,复制将从该备份中读取日志序列号 (LSN)。 Server A 上发布数据库中所有 LSN 较高的更改都将传递到 Server D 上。

  8. 完成向导。

  9. 对于任何包含标识范围的已发布表,您为 Server A 上的每个表分配的标识范围也将用在 Server D 上。如果您不愿意停止系统和完全连接所有节点,请使用下面的过程为 Server D 上的每个表分配适当的范围。 如果您愿意完全连接所有节点,可以在停止系统后分配范围。

    1. Server D 上执行 sp_requestpeerresponse,并检索输出参数 @request_id

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

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

    4. 使用 DBCC CHECKIDENT 在 Server D 上对每个表重设种子,以确保使用适当的范围。

第二阶段的过程

停止拓扑

  1. 停止对等拓扑中所有已发布表上的所有活动。

  2. Server AServer BServer CServer D 的数据库执行 sp_requestpeerresponse,然后检索输出参数 @request_id

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

  4. 执行 sp_helppeerresponses,执行时为其提供在步骤 2 中检索到的 @request_id 值。请等到所有节点都指示它们已接收到对等请求。

  5. 指定新的标识范围(如果需要)。 现在可以通过添加其余订阅来完全连接拓扑了。

为新节点创建其他订阅

  1. 右键单击您在 Server A 上创建的发布,再单击**“配置对等拓扑”**。

  2. 在配置对等拓扑向导的**“发布”**页上,您在 Server A 上创建的发布将处于选定状态。

  3. 在**“配置拓扑”**页面的设计图面上,您将看到 Server AServer BServer CServer D

    1. 右键单击 Server B,单击**“添加新的对等连接”**,然后将连接箭头拖到 Server D 上。

    2. 右键单击 Server C,单击**“添加新的对等连接”**,然后将连接箭头拖到 Server D 上。

  4. 在**“日志读取器代理安全性”**页上,为 Server BServer CServer D 上的日志读取器代理指定凭据。

  5. 在**“分发代理安全性”**页上,为 Server AServer BServer CServer D 上的分发代理指定凭据。

  6. 在**“新对等方初始化”页上,选择“我手动创建了对等数据库或还原了原始发布数据库的备份,该发布数据库自这次备份以来不曾发生更改”**。所有节点均已有数据;指定此选项可确保在每个节点之间建立起正确的订阅关系。

  7. 完成此向导,然后重新启动系统中的活动。