当包含一个作为复制订阅服务器的数据库的 AlwaysOn 可用性组发生故障转移时,复制订阅可能会失败。 对于事务复制推送订阅服务器,如果订阅是使用 AG 侦听器名称创建的,则在故障转移后,分发代理会自动继续复制。 对于事务复制拉取订阅服务器,如果订阅是使用 AG 侦听器名称创建的,且原始订阅服务器已启动并正在运行,则在故障转移后,分发代理会自动继续复制。 这是因为仅在原始订阅服务器(AG 的主要副本)上创建分发代理作业。 对于合并订阅服务器,复制管理员必须通过重新创建订阅手动重新配置订阅服务器。
支持的内容
SQL Server 复制支持发布服务器的自动故障转移、事务性订阅服务器的自动故障转移,以及合并订阅服务器的手动故障转移。 不支持分发器在可用性数据库上的故障转移。 AlwaysOn 不能与 Websync 和 SQL Server Compact 方案结合使用。
合并拉取订阅的故障转移
拉取订阅在可用性组故障转移时失败,因为拉取代理找不到托管主副本的服务器实例的msdb数据库中存储的作业,因为服务器实例已失败而不可用。
合并推送订阅的故障转移
在可用性组故障转移期间,推送订阅会失败,因为推送代理无法再连接到原始订阅者上的原始订阅数据库。
如何在 AlwaysON 环境中创建事务型订阅
对于事务复制,请使用以下步骤配置和故障转移订阅服务器可用性组:
在创建订阅之前,请将订阅服务器数据库添加到相应的 AlwaysOn 可用性组。
将订阅服务器的可用性组侦听器作为链接服务器添加到可用性组的所有节点。 此步骤可确保所有潜在故障转移伙伴能够知道并连接到侦听器。
使用下面“创建事务性复制推送订阅”部分中的脚本,以订阅服务器的可用性组侦听器名称来创建订阅。 在进行故障转移后,侦听器名称将始终有效,并且订阅服务器的实际服务器名称将取决于成为新的主节点的实际节点。
注释
订阅必须通过使用 Transact-SQL 脚本创建,不能使用 Management Studio创建。
如果创建拉取订阅:
在 Management Studio 中,在主订阅服务器节点上,打开 SQL Server 代理树。
标识 拉取分发代理 作业并编辑作业。
在运行代理作业步骤中,检查
-Publisher和-Distributor参数。 请确保这些参数包含发布服务器和分发服务器的正确直接服务器和实例名称。将
-Subscriber参数更改为订阅服务器的可用性组监听器名称。
按照这些步骤创建订阅后,故障转移后无需执行任何操作。
创建事务复制推送订阅
-- commands to execute at the publisher, in the publisher database:
use [<publisher database name>]
EXEC sp_addsubscription @publication = N'<publication name>',
@subscriber = N'<availability group listener name>',
@destination_db = N'<subscriber database name>',
@subscription_type = N'Push',
@sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0;
GO
EXEC sp_addpushsubscription_agent @publication = N'<publication name>',
@subscriber = N'<availability group listener name>',
@subscriber_db = N'<subscriber database name>',
@job_login = null, @job_password = null, @subscriber_security_mode = 1;
GO
在订阅服务器的可用性组故障转移后恢复合并代理
进行合并复制时,复制管理员必须手动重新配置订阅服务器,步骤如下:
执行
sp_subscription_cleanup删除订阅服务器的旧订阅。 在新的主副本(以前为辅助副本)上执行此操作。通过从新快照开始创建新订阅来重新创建订阅。
注释
对于合并复制的订阅者而言,当前过程不太方便。然而,合并复制的主要应用场景是断开连接的用户(台式机、笔记本电脑、手持设备),这些用户不会在订阅者上使用"AlwaysOn"可用性组。