在现有AlwaysOn集群增加发布订阅节点
配置
前提
- 节点1、节点2在AlwaysOn集群,节点3作为集群外节点使用订阅复制集群数据同步
- 发布对象必须要有主键
步骤
- 登录节点3配置分发distributor
- 在节点3中指定节点1和节点2是发布服务器
- 登录节点2指定节点3是分发服务器
- 登录节点1指定节点3是分发服务器
- 登录节点1创建发布
- 登录节点3,在分发数据库下执行下面的语句,执行下面的语句之后,logreader就可以通过Listener连接到正在工作的Primary Server了。请注意这一步是实现Publication database高可用性的关键步骤。
EXEC sys.sp_redirect_publisher
@original_publisher = 'Denali1',
@publisher_db = 'tranPubDB',
@redirected_publisher = 'liweion'; -- 将之前创建的listener带入到这个参数
配置步骤就全部完成了,之后您可以任意添加订阅,当failover发生之后,事务复制也可以正常工作。
参考:https://www.cnblogs.com/stswordman/p/3252549.html
发布订阅的限制
主键列对于事务发布中的所有表都是必需的。 主键对于合并发布中的表并不是必需的,但如果存在主键列,则无法筛选该列。
问题
1、订阅创建时提示:本地订阅已存在,但本地订阅中不显示
参考:https://blog.csdn.net/selaginella/article/details/82563207
参考:https://learn.microsoft.com/zh-cn/sql/relational-databases/replication/delete-a-push-subscription?view=sql-server-ver16
在发布服务器上,对发布数据库执行 transact-SQL) sp_dropsubscription (。 指定 @publication 和 @subscriber。 为@article指定所有值。 (可选) 如果无法访问分发服务器,请为@ignore_distributor指定值 1 以删除订阅,而无需在分发服务器上删除相关对象。
在订阅服务器上的订阅服务器上,执行 sp_subscription_cleanup (Transact-SQL) 以删除订阅数据库中的复制元数据。
2、删除发布时出现问题提示:无法更新分发数据库订阅表。无法更改订阅状态。
-- 下面存储过程的参数是 数据库名
EXEC sp_removedbreplication 'TestSync'
参考:https://blog.csdn.net/huyu107/article/details/51098462?utm_source=blogxgwz6
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?