教程:为复制准备 SQL Server(发布服务器、分发服务器、订阅服务器)

适用于:SQL Server

在配置复制拓扑之前,制定安全计划是非常重要的。 本教程演示如何更好地保护复制拓扑的安全。 它还会演示如何配置分发,这是数据复制的第一步。 开始其他教程之前,必须先完成本教程。

注意

若要在服务器之间安全地复制数据,你应该实施复制安全最佳做法中提出的所有建议。

要学习的知识

在本教程中,你将了解如何准备服务器以便用最少的特权安全地运行复制。

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

  • 为复制创建 Windows 帐户。
  • 准备快照文件夹。
  • 配置分发。

先决条件

本教程适用于熟悉基本数据库操作,但对复制认识有限的用户。

若要完成本教程,需要 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 固定服务器角色成员的登录名连接到发布服务器和订阅服务器。 有关此角色的详细信息,请参阅服务器级别角色

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

为复制创建 Windows 帐户

在本部分中,将创建 Windows 帐户以运行复制代理。 你将在本地服务器上为以下代理创建一个单独的 Windows 帐户:

Agent 位置 Account name
快照代理 发布者 <machine_name>\repl_snapshot
日志读取器代理 发布者 <machine_name>\repl_logreader
分发代理 发布服务器和订阅服务器 <machine_name>\repl_distribution
合并代理 发布服务器和订阅服务器 <machine_name>\repl_merge

注意

在复制教程中,发布服务器和分发服务器共享同一 SQL Server 实例 (NODE1\SQL2016)。 订阅服务器实例 (NODE2\SQL2016) 是远程实例。 发布服务器和订阅服务器可以共享同一 SQL Server 实例,但这不是必需的。 如果发布服务器和订阅服务器共享同一实例,则在订阅服务器上用于创建帐户的步骤不是必须的。

在发布服务器上为复制代理创建本地 Windows 帐户

  1. 在发布服务器上,从“控制面板”的“管理工具”中打开“计算机管理”

  2. 在“系统工具”中,展开“本地用户和组”

  3. 右键单击“用户”,然后选择“新建用户”

  4. 在“用户名”框中,输入 repl_snapshot,提供密码和其他相关信息,然后选择“创建”来创建 repl_snapshot 帐户

  5. 重复上述步骤创建 repl_logreader、repl_distribution 和 repl_merge 帐户:

    List of replication users

  6. 选择关闭

在订阅服务器上为复制代理创建本地 Windows 帐户

  1. 在订阅服务器上,从“控制面板”的“管理工具”中打开“计算机管理”

  2. 在“系统工具”中,展开“本地用户和组”

  3. 右键单击“用户”,然后选择“新建用户”

  4. 在“用户名”框中,输入 repl_distribution,提供密码和其他相关信息,然后选择“创建”来创建 repl_distribution 帐户

  5. 重复上述步骤创建 repl_merge 帐户。

  6. 选择关闭

有关详细信息,请参阅复制代理概述

准备快照文件夹

在本部分中,你可配置用于创建和存储发布快照的快照文件夹。

为快照文件夹创建共享并分配权限

  1. 在文件资源管理器,浏览到 SQL Server 数据文件夹。 默认位置为 C:\Program Files\Microsoft SQL Server\MSSQL.X\MSSQL\Data。

  2. 创建名为 repldata的新文件夹。

  3. 右键单击该文件夹并选择“属性”

    a. 在“repldata 属性”对话框的“共享”选项卡上,选择“共享”

    b. 在“高级共享”对话框中,选择“共享此文件夹”,然后选择“权限”

    Selections for sharing the repldata folder

  4. 在“repldata 的权限”对话框中,选择“添加”。 在“选择用户、计算机、服务帐户或组”框中,键入以前创建的快照代理帐户的名称,例如 <Publisher_Machine_Name>\repl_snapshot。 选择“检查名称”,然后选择“确定”

    Selections to add sharing permissions

  5. 重复步骤 6,添加以前创建的两个帐户:<Publisher_Machine_Name>\repl_merge 和 <Publisher_Machine_Name>\repl_distribution

  6. 添加三个帐户后,会分配以下权限:

    • repl_distribution:读取
    • repl_merge:读取
    • repl_snapshot:完全控制

    Shared permissions for each account

  7. 共享权限配置正确后,选择“确定”关闭“repldata 的权限”对话框。 选择“确定”关闭“高级共享”对话框

  8. 选择“repldata 属性”对话框中的“安全性”选项卡,然后选择“编辑”

  9. 在“repldata 的权限”对话框中,选择“添加”。 在“选择用户、计算机、服务帐户或组”框中,键入以前创建的快照代理帐户的名称,例如 <Publisher_Machine_Name>\repl_snapshot。 选择“检查名称”,然后选择“确定”

    Selections to add security permissions

  10. 重复上一步,为分发代理和合并代理添加权限,其格式分别为 <Publisher_Machine_Name>\repl_distribution 和 <Publisher_Machine_Name>\repl_merge

  11. 验证是否允许以下权限:

    • repl_distribution:读取
    • repl_merge:读取
    • repl_snapshot:完全控制

    User permissions for replication data

  12. 再次选择“共享”选项卡,并记下共享的“网络路径”。 稍后配置“快照文件夹”时,会需要此路径。

    Network path on the

  13. 选择“确定”关闭“repldata 属性”对话框

有关详细信息,请参阅保护快照文件夹的安全

配置分发

在本部分中,将在发布服务器中配置分发,并设置所需的发布数据库和分发数据库权限。 如果已经配置了分发服务器,则必须在开始本部分之前禁用发布和分发。 如果必须保留现有复制拓扑,请不要执行该操作,生产中尤其如此。

使用远程分发服务器配置发布服务器不属于本教程讨论的范畴。

在发布服务器中配置分发

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

  2. 右键单击“复制”文件夹,然后选择“配置分发”

    注意

    • 如果连接到 SQL Server 时使用的是 localhost,而不是实际服务器名称,则系统会向你显示一个警告提示,指出 SQL Server 无法连接到 localhost 或“IP 地址”。 在警告对话框中选择“确定”。 在“连接到服务器”对话框中,将“服务器名称”从 localhost 或 IP 地址更改为你的服务器的名称。 然后选择“连接”。
    • 目前 SQL Server Management Studio (SSMS) 18.0 (以及更高版本)存在一个已知问题,在使用 IP 地址连接到分发服务器时不会显示警告消息,但是这样的操作仍然无效。 在连接到分发服务器时,应使用实际的服务器名称。

    此时分发配置向导启动。

  3. 在“分发服务器”页上,选择 <'ServerName'>“将充当自己的分发服务器;SQL Server 将创建分发数据库和日志”。 然后,选择“下一步”。

    Option to make the server act as its own distributor

  4. 如果 SQL Server 代理未运行,则在 SQL Server“代理启动”页上,选择“是,将 SQL Server 代理服务配置为自动启动”。 选择下一步

  5. 在“快照文件夹”框中输入路径 \\<Publisher_Machine_Name>\repldata,然后选择“下一步”。 此路径应匹配以前配置共享属性后,在 repldata 属性文件夹的“网络路径”下看到的路径。

    Comparison of network paths in the

  6. 接受向导剩余页上的默认值。

    Last page of the wizard

  7. 选择“完成”以启用分发

配置分发服务器时,可能会看到以下错误。 它指示用于启动 SQL Server 代理帐户的帐户不是系统上的管理员。 需要手动启动 SQL Server 代理,向现有帐户授予以下权限,或修改正在使用的帐户。

Error message for configuring the SQL Server Agent

如果正在使用管理权限运行 SQL Server Management Studio 实例,可从 SSMS 中手动启动 SQL 代理:

Selecting

注意

如果 SQL 代理不启动,右键单击 SSMS 中的 SQL Server 代理,然后选择“刷新”。 如果仍处于停止状态,请从 SQL Server 配置管理器中手动启动它。

设置数据库权限

  1. 在 SQL Server Management Studio 中,展开“安全性”,右键单击“登录名”,然后选择“新建登录名”

  2. 在“常规”页上,选择“搜索”。 在“输入要选择的对象名称”框中输入 <Publisher_Machine_Name>\repl_snapshot,然后依次选择“检查名称”和“确定”

    Selections for entering the object name

  3. 在“用户映射”页上,在“映射到此登录名的用户”列表中选择“distribution”和“AdventureWorks2022”数据库。

    在“数据库角色成员身份”列表中,为这两个数据库的登录名选择“db_owner”角色。

    Selecting the databases and their role

  4. 选择“确定”创建登录名

  5. 重复步骤 1-4,为其他本地帐户(repl_distribution、repl_logreader 和 repl_merge)创建登录名。 这些登录名也必须映射到属于“distribution”数据库和“AdventureWorks”数据库中“db_owner”固定数据库角色成员的用户。

    View of all four accounts in Object Explorer

有关详细信息,请参阅:

后续步骤

现在,你已经为复制成功准备了服务器。 下一篇文章将介绍如何配置事务复制: