1. 实现方式
1.1. 日志传送
这是一种在 SQL Server 数据库之间复制数据的技术。它通过不断地从一个数据库(主数据库)备份事务日志,并将它们复制并还原到另一个数据库(辅助数据库),使辅助数据库与主数据库基本保持同步。日志传送主要用于灾难恢复。这种方式要求数据库必须是完整恢复模式,且同步粒度为数据库级。
1.2. 事务复制
读操作远大于写,可以接受一定的数据同步耗时
是一种更复杂的数据复制技术,它允许你选择要复制的表和索引。事务复制通过监视发布数据库的事务日志并将标记为要复制的事务从事务日志复制到分发数据库中。事务复制通常用于将数据从一个服务器复制到另一个服务器。这种方式要求表必须有主键,且同步粒度为表级。
1.3. Always On
需要较高的可用性和自动故障转移
是 SQL Server 2012 中引入的一种高可用性和灾难恢复解决方案,它提供了一种替代数据库镜像的企业级方案。Always On 可用性组支持一组读写主数据库以及一至八组对应的辅助数据库。这种技术允许在出现问题时自动故障转移到一个辅助副本,同时还支持读取缩放,可以将读取负载分布到一个或多个辅助副本上。
2. 环境要求
- 不同版本的 SQL Server 实例不支持复制。
- 主从服务器能够互相通信,且 SQL Server 代理已启动。
- 主从服务器上都需要建立具有相同账号和密码的本地管理员用户,以便同步操作。
以下操作以 SQL Server 2012 为例,数据库信息如下:
Microsoft SQL Server Management Studio 11.0.2100.60
Microsoft 数据访问组件 (MDAC) 10.0.17763.1
Microsoft MSXML 3.0 5.0 6.0
Microsoft Internet Explorer 9.11.17763.0
Microsoft .NET Framework 4.0.30319.42000
操作系统 6.3.17763
3. 具体实现
3.1. 事务复制
3.1.1. 配置分发 & 创建发布
在发布服务器上配置分发,这包括设置分发数据库和分发代理。
在 SQL Server Management Studio 中连接到发布服务器,展开服务器节点。展开「复制」文件夹,右键点击「本地发布」,然后选择「新建发布」。
3.1.1.1. 分发服务器
3.1.1.2. 发布数据库
3.1.1.3. 发布类型
选择「事务发布」
3.1.1.4. 项目
选择要发布的对象,事务发布中的所有表都需要主键列
3.1.1.5. 项目问题
这里列出不能发布的问题列表及原因
3.1.1.6. 筛选表行
这里可以添加一些数据过滤的条件,如果不需要则忽略,进入下一步
3.1.1.7. 快照代理
选择「立即创建快照并使快照保持可用状态,以初始化订阅」,点击下一步
3.1.1.8. 代理安全性
取消勾选「使用快照代理的安全设置」
点击「安全设置」,推荐使用 Windows 账户运行,这里为方便选择「在 SQL Server」代理服务账户下运行
3.1.1.9. 完成向导
输入「发布名称」,然后选择「完成」,然后等待发布完成
创建发布时,如果未运行 SQL Server 代理,则可能会遇到以下警告错误。 此错误说明已成功创建发布,但快照代理无法启动。
如果发生这种情况,需要启动 SQL Server 代理,然后手动启动快照代理。 参考【查看快照代理状态】
3.1.1.10. 查看快照代理状态
如果创建发布时未运行 SQL Server 代理,检查发布的“快照代理状态”时,将看到快照代理处于“从未运行”状态。 如果是这种情况,则选择「启动」,启动快照代理
3.1.2. 添加订阅
在订阅服务器上添加对发布的订阅。这可以是推送订阅(由发布服务器管理)或拉取订阅(由订阅服务器管理)。
3.1.2.1. 新建订阅
右键选择「新建订阅」
3.1.2.2. 分发代理位置
3.1.2.3. 订阅服务器
点击「添加订阅服务器」,选择「添加 SQL Server 订阅服务器」
选择「新建数据库」,按要求填写新的数据库信息
3.1.2.4. 分发代理安全性
通常还是推荐使用 Windows 账户运行,这里为方便选择「在 SQL Server代理服务账户下运行」
3.1.2.5. 完成订阅
等待订阅创建完成
3.1.2.6. 查看同步状态
3.1.3. 同步数据
日志读取器代理监视发布服务器的事务日志,将新的更改复制到分发数据库中。分发代理然后将这些更改从分发数据库复制到订阅服务器。
3.1.4. 监控复制
使用 SQL Server Management Studio (SSMS) 或复制监视器来监控复制的状态和性能。
选择「跟踪令牌」选项卡,点击「插入跟踪器」
经过测试,数据可以正常同步到子库,但是存在延迟滞后,滞后时长如图为8s
3.2. Always On
3.2.1. 启用 Always On 可用性组
在 SQL Server 实例上启用 Always On 功能,这通常需要实例是 Windows Server 故障转移群集(WSFC)的节点。
3.2.1.1. 如何确定是否已启用 AlwaysOn 可用性组
右键服务器实例,选择「属性」
是否启用 HADR,
True(如果启用了 AlwaysOn 可用性组)
False(如果禁用了 AlwaysOn 可用性组)
3.2.1.2. 启用 AlwaysOn 高可用性
打开SQL Server 配置管理器,右键「SQL Server(MSSQLSERVER)」,选择属性
切换到「Always On 高可用性」标签,勾选「启用 AlwaysOn 可用性组」。
遇到「此计算机不是故障转移群集中的节点」处理方式详见异常处理 4.2
遇到以下问题,需要进行补丁更新
http://thehotfixshare.net/board/index.php?/files/file/15632-windows60-kb2494036-x64msu/
3.2.2. 创建数据库镜像端点
确保每个服务器实例都拥有数据库镜像端点,用于接收来自其他服务器实例的可用性组连接。
3.2.3. 创建可用性组
在承载要添加到可用性组的数据库的 SQL Server 实例上创建可用性组,并指定主副本和辅助副本。
3.2.4. 配置可用性组侦听器:
创建可用性组侦听器,以便应用程序可以使用 DNS 名称连接到当前的主副本或配置为接受连接的辅助副本。
3.2.5. 准备辅助数据库
在辅助副本的服务器实例上,使用RESTORE WITH NORECOVERY还原主数据库的备份。
3.2.6. 将辅助数据库联接到可用性组
在辅助副本的服务器实例上,将辅助数据库联接到可用性组,以开始数据同步。
3.2.7. 配置运行备份作业的位置
如果要对辅助数据库执行备份,则必须创建一个备份作业脚本,考虑到自动备份首选项。
3.2.8. 管理可用性组、副本和数据库
执行故障转移、监视可用性组的运行状况等任务。
4. 异常处理
4.1. 没有找到「配置分发」选项
确保 SQL Server 代理服务正在运行。分发配置需要 SQL Server 代理服务来执行复制相关的作业。
4.2. 此计算机不是故障转移群集中的节点
4.2.1. 安装故障转移群集功能
打开「服务器管理器」,选择「添加角色和功能」,在「功能」页签中勾选「故障转移群集」
4.2.2. 添加节点
打开「故障转移群集管理器」,右键点击你的群集名,然后选择“添加节点”。这将启动一个向导,引导你完成添加节点的过程。
这里由于没有使用域管理员登录,所以没有群集数据。创建域管理用户详见 4.3
4.2.3. 配置角色
你需要在群集上配置角色(如 Hyper-V、SQL Server 等)。这些角色定义了群集将如何提供服务和资源。
4.3. 若要管理故障转移群集,必须使用域用户账户登录
4.3.1. 安装 Active Directory 域服务
等待安装完成后重启服务器
这个安装过程中,可能会失败,我遇到的错误是「无法完成操作,因为指定的服务器需要重新启动」,反复重启服务器都没有解决。
后来找到解决方案是,将服务「Remote Registry」启动
将此服务器提升为域控制器
添加新林
键入目录服务器还原模式(DSRM)密码,这里需要强密码,我设置为「7f20!123」
跳过 DNS 选项
默认 NetBIOS 域名和路径
先决条件检查通过后,点击「安装」,安装完成后,服务器会自动重启
安装完成
4.3.2. 新建域管理账户
设置域管理账户密码
将域管理账户添加到组