教程:为复制准备 SQL Server(发布服务器、分发服务器、订阅服务器)
适用于:SQL Server
在配置复制拓扑之前,制定安全计划是非常重要的。 本教程演示如何更好地保护复制拓扑的安全。 它还会演示如何配置分发,这是数据复制的第一步。 开始其他教程之前,必须先完成本教程。
注意
若要在服务器之间安全地复制数据,你应该实施复制安全最佳做法中提出的所有建议。
学习内容
在本教程中,你将了解如何准备服务器以便用最少的特权安全地运行复制。
在本教程中,您将学习如何执行以下操作:
- 为复制创建 Windows 帐户。
- 准备快照文件夹。
- 配置分发。
先决条件
本教程适用于熟悉基本数据库操作,但对复制认识有限的用户。
若要完成本教程,需要 SQL Server、SQL Server Management Studio (SSMS) 以及 AdventureWorks 数据库:
在发布服务器(源)上,安装:
- 任意版本的 SQL Server,但 SQL Server Express 或 SQL Server Compact 除外。 这些版本不能充当复制发布服务器。
- AdventureWorks2012 示例数据库。 为了增强安全性,默认情况下不会安装示例数据库。
订阅服务器(目标)上,安装任意版本的 SQL Server,SQL Server Compact 除外。 SQL Server Compact 不能充当事务复制中的订阅服务器。
下载 AdventureWorks 示例数据库。 有关在 SSMS 中还原数据库的说明,请参阅还原数据库。
注意
- 在相差两个版本以上的 SQL Server 实例上不支持复制。 有关详细信息,请参阅复制拓扑中受支持的 SQL Server 版本。
- 在 SQL Server Management Studio 中,必须使用属于 sysadmin 固定服务器角色成员的登录名连接到发布服务器和订阅服务器。 有关此角色的详细信息,请参阅服务器级别角色。
本教程的预计学时:30 分钟
为复制创建 Windows 帐户
在本部分中,将创建 Windows 帐户以运行复制代理。 你将在本地服务器上为以下代理创建一个单独的 Windows 帐户:
代理 | 位置 | 帐户名 |
---|---|---|
快照代理 | 发布者 | <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 帐户
在发布服务器上,从“控制面板”的“管理工具”中打开“计算机管理”。
在“系统工具”中,展开“本地用户和组”。
右键单击“用户”,然后选择“新建用户” 。
在“用户名”框中,输入 repl_snapshot,提供密码和其他相关信息,然后选择“创建”来创建 repl_snapshot 帐户:
重复上述步骤创建 repl_logreader、repl_distribution 和 repl_merge 帐户:
选择“关闭” 。
在订阅服务器上为复制代理创建本地 Windows 帐户
在订阅服务器上,从“控制面板”的“管理工具”中打开“计算机管理”。
在“系统工具”中,展开“本地用户和组”。
右键单击“用户”,然后选择“新建用户” 。
在“用户名”框中,输入 repl_distribution,提供密码和其他相关信息,然后选择“创建”来创建 repl_distribution 帐户。
重复上述步骤创建 repl_merge 帐户。
选择“关闭” 。
有关详细信息,请参阅复制代理概述。
准备快照文件夹
在本部分中,你可配置用于创建和存储发布快照的快照文件夹。
为快照文件夹创建共享并分配权限
在文件资源管理器,浏览到 SQL Server 数据文件夹。 默认位置为 C:\Program Files\Microsoft SQL Server\MSSQL.X\MSSQL\Data。
创建名为 repldata的新文件夹。
右键单击该文件夹并选择“属性”。
a. 在“repldata 属性”对话框的“共享”选项卡上,选择“共享”。
b. 在“高级共享”对话框中,选择“共享此文件夹”,然后选择“权限”。
在“repldata 的权限”对话框中,选择“添加”。 在“选择用户、计算机、服务帐户或组”框中,键入前面创建的快照代理帐户的名称,Publisher_Machine_Name><\repl_snapshot。 选择“检查名称”,然后选择“确定” 。
重复步骤 6,添加前面创建的另外两个帐户: <Publisher_Machine_Name>\repl_merge 和 <Publisher_Machine_Name>\repl_distribution。
添加三个帐户后,会分配以下权限:
- repl_distribution:读取
- repl_merge:读取
- repl_snapshot:完全控制
共享权限配置正确后,选择“确定”关闭“repldata 的权限”对话框。 选择“确定”关闭“高级共享”对话框。
选择“repldata 属性”对话框中的“安全性”选项卡,然后选择“编辑”:
在“repldata 的权限”对话框中,选择“添加”。 在“选择用户、计算机、服务帐户或组”框中,键入前面创建的快照代理帐户的名称,Publisher_Machine_Name><\repl_snapshot。 选择“检查名称”,然后选择“确定” 。
重复上一步,将分发代理的权限添加为 <Publisher_Machine_Name>\repl_distribution,将合并代理添加为 <Publisher_Machine_Name>\repl_merge。
验证是否允许以下权限:
- repl_distribution:读取
- repl_merge:读取
- repl_snapshot:完全控制
再次选择“共享”选项卡,并记下共享的“网络路径”。 稍后配置“快照文件夹”时,会需要此路径。
选择“确定”关闭“repldata 属性”对话框。
有关详细信息,请参阅保护快照文件夹的安全。
配置分发
在本部分中,将在发布服务器中配置分发,并设置所需的发布数据库和分发数据库权限。 如果已经配置了分发服务器,则必须在开始本部分之前禁用发布和分发。 如果必须保留现有复制拓扑,请不要执行该操作,生产中尤其如此。
使用远程分发服务器配置发布服务器不属于本教程讨论的范畴。
在发布服务器中配置分发
在 SQL Server Management Studio 中连接到发布服务器,然后展开服务器节点。
右键单击“复制”文件夹,然后选择“配置分发”:
注意
- 如果连接到 SQL Server 时使用的是 localhost,而不是实际服务器名称,则系统会向你显示一个警告提示,指出 SQL Server 无法连接到 localhost 或 IP 地址。 在警告对话框中选择“确定”。 在“连接到服务器”对话框中,将“服务器名称”从 localhost 或 IP 地址更改为你的服务器的名称。 然后选择“连接” 。
- 目前 SQL Server Management Studio (SSMS) 18.0 (以及更高版本)存在一个已知问题,在使用 IP 地址连接到分发服务器时不会显示警告消息,但是这样的操作仍然无效。 在连接到分发服务器时,应使用实际的服务器名称。
此时分发配置向导启动。
在“分发服务器”页上,选择<“ServerName”>将充当自己的分发服务器;SQL Server将创建分发数据库和日志。 然后,选择“下一步”。
如果 SQL Server 代理未运行,则在 “代理启动”页面上,选择“是,将 SQL Server 代理服务配置为自动启动”SQL Server 。 选择“下一页”。
在“快照文件夹”框中输入路径 \\<Publisher_Machine_Name>\repldata,然后选择“下一步”。 此路径应匹配以前配置共享属性后,在 repldata 属性文件夹的“网络路径”下看到的路径。
接受向导剩余页上的默认值。
选择“完成”以启用分发。
配置分发服务器时,可能会看到以下错误。 它指示用于启动 SQL Server 代理帐户的帐户不是系统上的管理员。 需要手动启动 SQL Server 代理,向现有帐户授予以下权限,或修改正在使用的帐户。
如果正在使用管理权限运行 SQL Server Management Studio 实例,可从 SSMS 中手动启动 SQL 代理:
注意
如果 SQL 代理不启动,右键单击 SSMS 中的 SQL Server 代理,然后选择“刷新”。 如果仍处于停止状态,请从 SQL Server 配置管理器中手动启动它。
设置数据库权限
在 SQL Server Management Studio 中,展开“安全性”,右键单击“登录名”,然后选择“新建登录名”:
在“常规”页上,选择“搜索”。 在“输入<要选择的对象名称”框中输入Publisher_Machine_Name>\repl_snapshot,选择“检查名称”,然后选择“确定”。
在“用户映射”页上,在“映射到此登录名的用户”列表中选择“distribution”和“
AdventureWorks2019
”数据库。在“数据库角色成员身份”列表中,为这两个数据库的登录名选择“db_owner”角色。
选择“确定”创建登录名。
重复步骤 1-4,为其他本地帐户(repl_distribution、repl_logreader 和 repl_merge)创建登录名。 这些登录名也必须映射到属于“distribution”数据库和“AdventureWorks”数据库中“db_owner”固定数据库角色成员的用户。
有关详细信息,请参阅:
后续步骤
现在,你已经为复制成功准备了服务器。 下一篇文章将介绍如何配置事务复制: