一、产品介绍
1.1、SQL Server 复制
复制是一组技术,它将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库之间进行同步以保持一致性。 使用复制,可以通过局域网和广域网、拨号连接、无线连接和 Internet 将数据分配到不同位置以及分配给远程或移动用户。
- 事务复制通常用于需要高吞吐量的服务器到服务器方案(包括:提高可伸缩性和可用性、数据仓库和报告、集成多个站点的数据、集成异类数据以及减轻批处理的负荷)。
- 合并复制主要是为可能存在数据冲突的移动应用程序或分步式服务器应用程序设计的。 常见应用场景包括:与移动用户交换数据、POS(消费者销售点)应用程序以及集成来自多个站点的数据。
- 快照复制用于为事务复制和合并复制提供初始数据集;在适合数据完全刷新时也可以使用快照复制。 利用这三种复制,SQL Server 提供功能强大且灵活的系统,以便使企业范围的数据同步。 Windows Server 2012 和 Windows 8 都支持复制到 SQLCE 3.5 和 SQLCE 4.0。
1.2、数据流动(发布过程)
1.2.1、事务日志读取
发布者会读取发布数据库的事务日志。当数据库中的数据发生插入、更新或删除操作时,这些操作会被记录在事务日志中。例如,当员工的薪资信息在总部数据库中被更新后,这个更新操作会先记录在事务日志中。
1.2.2、分发代理(Distribution Agent)
它负责将从发布者的事务日志中读取到的更改发送到分发服务器(如果有独立的分发服务器的话,也可以和发布者在同一台服务器上)。然后再由分发服务器将这些更改发送到订阅者。例如,分发代理将总部数据库中员工薪资更新的操作信息发送到各个分公司的订阅服务器。
1.2.3、订阅者
是接收发布者所发布数据和数据更改的 SQL Server 实例。订阅者可以根据需要选择接收全部或部分发布的数据。例如,分公司的服务器作为订阅者,接收总部发布的销售数据,用于本地的销售分析和报表生成。
1.3、订阅服务器端组件
这是在订阅者服务器上创建的数据库,用于接收和存储从发布者发送过来的数据。例如,在分公司的 SQL Server 实例上创建一个名为“SubscribedSalesDB”的数据库,用来接收总部发布的销售数据。 以下是一个简单的示意图(使用简单图形表示,实际情况可能更复杂):
| 发布者(SQL Server 实例) | –(事务日志读取,分发代理)–> | 分发服务器(可选) | –(分发代理)–> | 订阅者(SQL Server 实例) |
|---|---|---|---|---|
| 发布数据库 | 订阅数据库 |
二、SQLServer 部署
2.1、环境规划
| 项目 | Server1 | Server2 |
|---|---|---|
| 操作系统 | Windows Server 2025 Datacenter (10.0) | Windows Server 2025 Datacenter (10.0) |
| 内存 | 4096GB | 4096GB |
| CPU | 4 | 4 |
| SQLServer 版本 | SQL Server 2022 | SQL Server 2022 |
| IP地址 | 192.168.4.51 | 192.168.4.52 |
| 操作系统 | SQL Server 2022 | SQL Server 2022 |
| 操作系统用户名 | administrator | administrator |
| 数据库用户名 | sa | sa |
PS C:\Users\Administrator\Desktop> Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber
WindowsProductName WindowsVersion OsBuildNumber
------------------ -------------- -------------
Windows Server 2025 Datacenter 2009 26100
PS C:\Users\Administrator\Desktop>
PS C:\Users\Administrator\Desktop>
PS C:\Users\Administrator\Desktop> systeminfo
主机名: SERVER1
OS 名称: Microsoft Windows Server 2025 Datacenter
OS 版本: 10.0.26100 暂缺 Build 26100
OS 制造商: Microsoft Corporation
OS 配置: 独立服务器
OS 构建类型: Multiprocessor Free
注册的所有人: 暂缺
注册的组织: 暂缺
产品 ID: 00491-40010-00000-AA001
初始安装日期: 2024/12/30, 13:11:04
系统启动时间: 2025/1/21, 9:08:03
系统制造商: VMware, Inc.
系统型号: VMware Virtual Platform
系统类型: x64-based PC
处理器: 安装了 4 个处理器。
[01]: Intel64 Family 6 Model 154 Stepping 3 GenuineIntel ~2688 Mhz
BIOS 版本: Phoenix Technologies LTD 6.00, 2020/11/12
Windows 目录: C:\WINDOWS
系统目录: C:\WINDOWS\system32
启动设备: \Device\HarddiskVolume1
系统区域设置: zh-cn;中文(中国)
输入法区域设置: zh-cn;中文(中国)
时区: (UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐
物理内存总量: 4096 MB
可用的物理内存: 4000 MB
虚拟内存: 最大值: 5,791 MB
虚拟内存: 可用: 1,908 MB
虚拟内存: 使用中: 3,883 MB
页面文件位置: C:\pagefile.sys
域: WORKGROUP
登录服务器: \\SERVER1
修补程序: 安装了 3 个修补程序。
[01]: KB5044030
[02]: KB5048667
[03]: KB5049685
网卡: 安装了 1 个 NIC。
[01]: Intel(R) 82574L Gigabit Network Connection
连接名: Ethernet0
启用 DHCP: 否
IP 地址
[01]: 192.168.4.51
[02]: fe80::7810:f303:36b1:8afd
基于虚拟化的安全性: 状态: 未启用
App Control for Business policy: 强制
App Control for Business user mode policy: 关
已启用安全功能:
Hyper-V 要求: 已检测到虚拟机监控程序。将不显示 Hyper-V 所需的功能。
PS C:\Users\Administrator\Desktop>
2.2、目录规划
- 1.可根据实际需求规划安装目录。
- 2.规划创建实例保存目录、归档保存目录、备份保存目录。
实例保存目录
> - 数据目录(D):
D:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA
-- 日志目录(L):
D:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA
-- 备份目录(U):
D:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup
三、SQLServer 部署
3.1、官网下载地址
https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads

3.2、选择安装类型
说明:
- 下载完以后会有 3 个选择安装类型,可以根据需求下载,本例选择第 2 种(自定义安装)

3.3、选择下载路径

3.4、等待下载完成

3.5、弹出安装界面,选择安装——全新 SQL Server 独立安装或向现有安装添加功能

3.6、选择安装版本
说明:
建议使用激活码安装。

3.7、勾选【我接受许可条款和(A)】

3.8、Microsoft 更新
说明:
建议勾选【使用 Microsoft 更新检查(推荐)(M)】。

3.9、等待 Microsoft 更新

3.10、功能选择
说明:
- 选择要安装的 Enterprise 功能。建议只需勾选需要使用到的功能。
- 设置安装目录、共享功能目录、共享功能目录(X86),不建议放置在默认目录(C 盘)下。


3.11、实例配置
说明:
- 指定 SQL Server 实例的名称和实例 ID。实例 ID 将成为安装路径的一部分。
- 本例采用默认实例 MSSQLSERVER。

3.12、PolyBase 配置
说明:
- 指定 PolyBase 扩大选项和端口范围。
- 本例指定 PolyBase 服务的端口范围 6 个或更多端口(16450-16460)。

3.13、服务器配置
说明:
- 服务账户和排序规则配置。
- 将所有服务启动类型改为自动启动。



3.14、数据库引擎配置
说明:
- 指定数据库引擎身份验证安全模式。
- 管理员、数据目录、TempDB、最大并行度、内存限制和文件流设置。
- 本例修改身份验证模式为(混合模式(SQL Server 身份验证和 Windows 身份验证)。

3.15、Analysis Services 配置
说明:
- 指定 Analysis Services 服务器模式、管理员和数据目录。
- 服务器类型:表格模式。
- 指定哪些用户具有对 Analysis Services 的管理权限。

3.16、Integration services scale Out 配置-主节点
说明:
- 指定 Scale Out 主节点的端口号和安全证书。
- 指定主节点用来与辅助角色节点进行通信的端口号(8391)。

3.17、Integration services scale Out 配置-辅助角色节点
说明:
- 指定 Scale Out 主节点的端口号和安全证书。
- 指定主节点用来与辅助角色节点进行通信的端口号(8391)。

3.18、再次确认以上安装信息

3.19、安装完成

四、创建本地发布
4.1、新建本地发布
说明:
启动复制向导:在发布服务器上,打开 SQL Server Management Studio,右键点击“复制”,选择“本地发布”,然后点击“新建发布”。

4.2、分发服务器
说明:
使用此服务器作为自己的分发服务器或选择其他服务器作为分发服务器。

4.3、快照文件夹
说明:
指定将要存储快照的根位置。
分发和合并代理访问其发布的快照,必须使用指定快照文件夹的网络路径。
注意事项:此处路径:D:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\ReplData 的安全用户需包含 Everyone,并授权完全控制。
4.4、选择分发数据库

4.5、选择项目
说明:
选择要作为项目发布的表或其他对象,选择列以筛选表。

4.6、筛选表行
说明:
如果需要指定筛选表行,请按格式填写筛选语句。

4.7、快照代理
说明:
指定何时运行快照代理。
本例选择【立即创建快照并使快照保持可用状态,以初始化订阅©】。

4.8、代理安全性
说明:
配置代理账户和权限。

4.9、代理安全性
说明:
配置代理账户和权限。
选择安全设置——在 SQL Server 代理账户下运行——选择使用以下 SQL Server 登陆名——录入登录名、密码、确认密码即可。

4.10、向导操作
说明:
选择单击“完成”后系统讲执行的操作。
勾选【创建发布】,点击下一步。

4.11、完成向导
说明:
录入发布名称:ReplData_NFineBase。
点击完成。

4.12、确认发布结果

五、创建本地订阅
5.1. SQL Server 订阅的概念
SQL Server 订阅是一种数据库复制技术,用于在分布式环境中实现数据同步和数据共享。它允许将数据从一个数据库实例(发布者)复制到其他数据库实例(订阅者),以便在不同的位置或不同的应用程序之间保持数据一致性。订阅与发布的主要概念包括发布者、订阅者和分发代理。发布者是数据的源头,订阅者是接收数据更改的目标,而分发代理则负责协调两者之间的数据传输。
5.2. SQL Server 订阅的主要用途
- 数据同步 :确保多个数据库实例之间的数据保持一致,特别是在分布式系统中。
- 数据分发 :将数据从一个中心数据库分发到多个分支数据库,支持业务扩展。
- 灾难恢复 :通过数据复制,可以在灾难发生时快速恢复数据。
- 负载均衡 :将数据复制到多个数据库实例上,以分散查询压力,提高系统性能。
5.3、新建订阅
说明:
发布服务器名称是:Server1;
订阅服务器名称是:Server2,此处登录 Server2。

5.4、选择发布服务器

5.5、登录发布服务器


5.6、选择发布服务器名称

5.7、分发代理位置
说明:
对于在此向导中创建的订阅,选择在分发服务器Server1上运行所有代理(推送订阅)®
该选项使用集中管理订阅同步变得更加简单。
5.8、选择发布服务器
说明:
点击订阅数据库中的新建数据库;
新建数据库NFineBase,并选择保存路径。




5.9、分发代理安全性
说明:
指定每个分发代理的进程账户和连接选项。
操作方式:
- 点击【与订阅服务器的连接】下的跳转按钮。
- 选择在SQL Server代理服务账户运行;
- 选择使用以下SQL Server登录名。
- 录入数据库账户名、密码即可。



5.10、同步计划
说明:
指定每个代理的同步计划;
点击下一步。

5.11、初始化订阅
说明:
指定是否使用发布数据和架构的快照初始化每个订阅;
勾选【已经经过内存优化】、【初始化】,初始化时间选择【立即】,点击下一步。

5.12、向导操作
说明:
选择单击“完成”后系统将执行的操作;
勾选【创建订阅】,点击下一步。

5.13、完成向导
说明:
验证在向导中选择的选项并单击【完成】。

5.14、完成订阅

5.15、检查同步结果
说明:
验证订阅后,数据是否同步在数据库NFineBase下。

六、问题
6.1、代理启动失败
检查原因:
Message: 对路径“D:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\ReplData\unc\SERVER1_NFINEBASE_REPLDATA_NFINEBASE\20250121161758\”的访问被拒绝。


解决方案:启动代理
在 ReplData 安全中增加用户 Everyone。并授权完全访问。



七、总结
SQL Server的本地发布订阅功能主要用于在不同的数据库之间进行数据同步和复制,以下是其主要功能总结:
数据同步与复制
- 实现数据一致性:通过发布订阅功能,可以将一个数据库(发布服务器)中的数据和数据库对象复制并分发到另一个数据库(订阅服务器),从而保持数据的一致性。
- 支持多种复制方式:SQL Server支持事务复制、快照复制和合并复制等多种复制方式,以满足不同的业务需求。
- 读写分离与负载均衡 读写分离:通过将读操作和写操作分离到不同的数据库服务器上,可以提高系统的性能和可扩展性。
- 负载均衡:通过将数据分布到多个订阅服务器上,可以实现负载均衡,提高系统的整体性能。
高可用性与灾难恢复
- 数据冗余与备份:通过将数据复制到多个服务器上,可以提供数据冗余,防止数据丢失。
- 故障转移与恢复:在主服务器出现故障时,可以快速切换到备用服务器,减少系统停机时间。
应用场景
- 数据库镜像与备份:发布订阅功能可以用于创建数据库镜像和备份,以提高数据库的可用性和灾难恢复能力。
- 数据仓库与报表:通过将数据从生产数据库复制到数据仓库,可以支持数据分析和报表生成。
- 系统集成与数据共享:发布订阅功能可以用于不同系统之间的数据集成和共享,减少数据不一致性。
注意事项
- 配置与管理复杂:发布订阅功能的配置和管理较为复杂,需要对SQL Server的复制技术有深入的理解。
- 性能与资源消耗:数据复制可能会消耗大量的系统资源,需要根据实际情况进行优化。
- 数据一致性与冲突处理:在多服务器环境下,可能会出现数据一致性问题和冲突,需要进行相应的处理。






