教程:在两个完全连接的服务器之间配置复制(事务)

适用于:SQL Server

事务复制是在持续连接的服务器之间实现数据移动的好方法。 使用复制向导可以轻松地配置和管理复制拓扑。

本教程演示如何为持续连接的服务器配置事务复制拓扑。 若要深入了解事务复制的工作机制,请参阅事务复制概述

要学习的知识

本教程将演示如何使用事务复制将数据从一个数据库发布到另一个数据库。

在本教程中,您将学习如何执行以下操作:

  • 通过事务复制创建发布服务器。
  • 创建事务发布服务器的订阅服务器。
  • 验证订阅和测量滞后时间。

先决条件

本教程适用于熟悉数据库基本操作但复制经验不足的用户。 在开始本教程的学习之前,必须已完成教程:为复制准备 SQL Server 的学习。

若要完成本教程,需要 SQL Server、SQL Server Management Studio (SSMS) 以及 AdventureWorks 数据库:

  • 在发布服务器(源)上,安装:

    • 任何版本的 SQL Server,SQL Server Express 或 SQL Server Compact 除外。 这些版本不能充当复制发布服务器。
    • AdventureWorks2022 示例数据库。 为了增强安全性,默认情况下不会安装示例数据库。
  • 在订阅服务器(目的地)上,安装任意版本的 SQL Server,SQL Server Compact 除外。 SQL Server Compact 不能充当事务复制中的订阅服务器。

  • 安装 SQL Server Management Studio。

  • 安装 SQL Server 2017 Developer 版本

  • 下载 AdventureWorks 示例数据库。 有关在 SSMS 中还原数据库的说明,请参阅还原数据库

注意

  • 在相差两个版本以上的 SQL Server 实例上不支持复制。 有关详细信息,请参阅复制拓扑中受支持的 SQL Server 版本
  • 在 SQL Server Management Studio 中,必须使用属于 sysadmin 固定服务器角色成员的登录名连接到发布服务器和订阅服务器。 有关此角色的详细信息,请参阅服务器级别角色

本教程的预计学时:60 分钟

配置事务复制的发布服务器

在本节中,使用 SQL Server Management Studio 创建一个事务发布,以便在 AdventureWorks2022 示例数据库中发布“Product”表的筛选子集。 你还要将分发代理使用的 SQL Server 登录名添加到发布访问列表 (PAL)。

创建发布并定义项目

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

  2. 右键单击“SQL Server 代理”,然后选择“开始”。 应在创建发布之前运行 SQL Server 代理。 如果该步骤未启动代理,则需要从“SQL Server 配置管理器”手动启动。

  3. 展开“复制”文件夹,右键单击“本地发布”文件夹,然后选择“新建发布”。 此步骤会启动新建发布向导:

    Selections for starting the New Publication Wizard

  4. 在“发布数据库”页上,选择 AdventureWorks2022,然后选择“下一步”

  5. 在“发布类型”页上,选择“事务发布”,然后选择“下一步”

  6. 在“项目”页上,展开“表”节点,选中“Product”复选框。 然后展开“Product”,并清除“ListPrice”和“StandardCost”旁边的复选框。 选择下一步

  7. 在“筛选表行”页上,选择“添加”

  8. 在“添加筛选器”对话框中,选择“SafetyStockLevel”列。 选择向右箭头,将此列添加到筛选查询的 Filter 语句 WHERE 子句。 然后在 WHERE 子句修饰符中手动键入以下内容:

    WHERE [SafetyStockLevel] < 500  
    

  9. 选择“确定”,然后选择“下一步”。

  10. 选中“立即创建快照并使快照保持可用状态,以初始化订阅”复选框,选择“下一步”

  11. 在“代理安全性”页上,清除“使用快照代理的安全设置”复选框。

    选择快照代理的“安全设置”。 在“进程帐户”框中输入 <Publisher_Machine_Name>\repl_snapshot,为此帐户提供密码,然后选择“确定”

  12. 重复上一步,将 <Publisher_Machine_Name>\repl_logreader 设置为日志读取器代理的进程帐户。 然后选择“确定”。

  13. 在“完成向导”页的“发布名称”框中,键入“AdvWorksProductTrans”,然后选择“完成”

  14. 创建发布后,选择“关闭”完成该向导

尝试创建发布时,如果未运行 SQL Server 代理,则可能会遇到以下错误。 此错误说明已成功创建发布,但快照代理无法启动。 如果发生这种情况,需要启动 SQL Server 代理,然后手动启动快照代理。 下一部分会提供说明。

Warning that the Snapshot Agent has failed to start

查看快照的生成状态

  1. 在 SQL Server Management Studio 中连接到发布服务器,然后依次展开服务器节点和“复制”文件夹。

  2. 在“本地发布”文件夹中,右键单击 AdvWorksProductTrans,然后选择“查看快照代理状态”
    Command on the shortcut menu for viewing the Snapshot Agent status

  3. 将显示该发布的快照代理作业的当前状态。 继续下一节之前,请确保快照作业已成功完成。

如果创建发布时未运行 SQL Server 代理,检查发布的“快照代理状态”时,将看到快照代理处于“从未运行”状态。 如果是这种情况,则选择“启动”,启动快照代理

如果看到此处的错误,请参阅对快照代理错误进行故障排除

将分发代理登录名添加到 PAL

  1. 在 SQL Server Management Studio 中连接到发布服务器,然后依次展开服务器节点和“复制”文件夹。

  2. 在“本地发布”文件夹中,右键单击 AdvWorksProductTrans,然后选择“属性”。 将显示“发布属性”对话框。

    a. 选择“发布访问列表”页,选择“添加”
    b. 在“添加发布访问项”对话框中,选择 <Publisher_Machine_Name>\repl_distribution,然后选择“确定”

    Selections for adding a login to the publication access list

有关详细信息,请参阅复制编程概念

创建事务发布的订阅

在本部分中,你可将订阅服务器添加到以前创建的发布。 本教程使用远程订阅服务器 (NODE2\SQL2016),但你也可在本地将订阅添加到发布服务器。

创建订阅

  1. 在 SQL Server Management Studio 中连接到发布服务器,然后依次展开服务器节点和“复制”文件夹。

  2. 在“本地发布”文件夹中,右键单击“AdvWorksProductTrans”发布,然后选择“新建订阅”。 新建订阅向导将启动:

    Selections to start the New Subscription Wizard

  3. 在“发布”页上,选择“AdvWorksProductTrans”,然后选择“下一步”

  4. 在“分发代理位置”页上,选择“在分发服务器上运行所有代理”,然后选择“下一步”。 有关请求订阅和推送订阅的详细信息,请参阅订阅发布

  5. 在“订阅服务器”页上,如果未显示订阅服务器实例的名称,选择“添加订阅服务器”,然后从下拉列表选择“添加 SQL Server 订阅服务器”。 此步骤会打开“连接到服务器”对话框。 输入订阅服务器实例名称,然后选择“连接”

    添加订阅服务器后,选中订阅服务器实例名称旁边的复选框。 然后在“订阅数据库”下选择“新建数据库”

  6. 将出现“新建数据库”对话框。 在“数据库名称”框中输入 ProductReplica,选择“确定”,然后选择“下一步”

    Entering a name for the subscription database

  7. 在“分发代理安全性”页中,选择省略号 (…) 按钮。 在“进程帐户”框中输入 <Publisher_Machine_Name>\repl_distribution,输入此帐户的密码,选择“确定”,然后选择“下一步”

    Distribution account information in the

  8. 选择“完成”以接受其余页中的默认值并完成向导

在订阅服务器上设置数据库权限

  1. 连接到 SQL Server Management Studio 中的订阅服务器。 展开“安全性”,右键单击“登录名”,然后选择“新建登录名”

    a. 在“常规”页的“登录名”下,选择“搜索”,并添加 <Subscriber_Machine_Name>\repl_distribution 的登录名。

    b. 在“用户映射”页上,将登录名“db_owner”成员身份授予“ProductReplica”数据库。

    Selections for configuring the login on the subscriber

  2. 选择“确定”,即可关闭“新建登录名”对话框

查看订阅的同步状态

  1. 连接到 SQL Server Management Studio 中的发布服务器。 展开服务器节点,然后展开“复制”文件夹。

  2. 在“本地发布”文件夹中,展开“AdvWorksProductTrans”发布,右键单击“ProductReplica”数据库中的订阅,然后选择“查看同步状态”。 系统将显示订阅的当前同步状态:

    Selections for opening the

  3. 如果订阅未在“AdvWorksProductTrans”下出现,请选择 F5 键刷新列表。

有关详细信息,请参阅:

测量复制滞后时间

在本节中,将用跟踪令牌来验证更改是否已复制到订阅服务器并确定滞后时间。 滞后时间是发布服务器处所做的更改显示到订阅服务器所需的时间。

  1. 连接到 SQL Server Management Studio 中的发布服务器。 展开服务器节点,右键单击“复制”文件夹,然后选择“启动复制监视器”

  2. 在左窗格中展开发布服务器组,展开发布服务器实例,然后选择“AdvWorksProductTrans”发布。

    a. 选择“跟踪令牌”选项卡
    b. 选择“插入跟踪器”
    c. 在以下列中查看跟踪令牌的运行时间: “发布服务器到分发服务器”“分发服务器到订阅服务器”“总滞后时间”。 值为“挂起”表示令牌尚未到达指定点。

    Information for the tracer token

有关详细信息,请参阅:

后续步骤

已成功配置用于事务复制的发布服务器和订阅服务器。 现在可以在发布服务器中的“Product”表中插入、更新或删除数据。 然后可以在订阅服务器上查询“Product”表,以查看已复制的更改。

下一篇文章介绍如何配置合并复制: