请教Service Broker 引发的死循环

sunbird69 2009-05-04 01:23:48
描述:

在数据库服务器上创建数据库镜像(多数据库镜像);因为其中有跨库数据操作,例如DB_A & DB_B,如果只有其中一个数据库Failover 则跨库操作失败。

解决方案:
1. 去除跨库操作
2. 采用Server Linked
3. 配合Service Broker

方案1由于某些原因(如跨库比较多,或需要同步数据影响性能),丢弃
方案2需要网络传输,数据量大对性能影响太大,丢弃
方案3 来源于一篇Blog : https://www.sqlservercentral.com/blogs/robert_davis/archive/2008/08/18/Automatically-respond-to-mirrored-database-failovers.aspx

实现之后测试发现的问题:
若两台服务器(principal & mirror)都开启Service Broker之后,先假设为服务器A,B;在极端测试下,即当A上的DB_A Failover之后,A上的DB_B Failover;马上将B上的DB_A/DB_B Failover则会发重死循环,DB会在两台服务器A&B之间一直Failover下去,分析原因大概是由于Service Broker的异步处理Message, 当A中的Message 还没有处理完成,B中的Failover 后,使B中也会有Message 要处理并使A产生新的Messgae,依此下去 , 产生死循环

虽然测试比较极端,但问题却是实实在在的存在,不知道大家有什么相应的解决方案吗?谢谢
...全文
210 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
guguda2008 2009-09-13
  • 打赏
  • 举报
回复
直接向老大提问,学习
wangyanboq 2009-09-13
  • 打赏
  • 举报
回复
我的看法是这样的,在存储过程中,需要判断当前镜像的状态。
并需要在一定时间内不断做判断,如每5秒一次,重复20次,如果镜像仍然处于失败状态(如:disconnect)
则将镜像服务器做一次强制服务操作。

如果在这5×20秒的时间内,镜像状态发生了变化,不是disconnect了,退出存储过程的处理。
此时系统会再启动下一个存储过程,处理下一条消息
  • 打赏
  • 举报
回复
帮等老大
sunbird69 2009-05-09
  • 打赏
  • 举报
回复
自已再顶一下

正在调整方案中...
usher_gml 2009-05-05
  • 打赏
  • 举报
回复
UP
ChinaJiaBing 2009-05-05
  • 打赏
  • 举报
回复

帮顶...
sunbird69 2009-05-05
  • 打赏
  • 举报
回复
自已顶一下
等待大家的建议 ...
linguojin11 2009-05-04
  • 打赏
  • 举报
回复
灌注下
ks_reny 2009-05-04
  • 打赏
  • 举报
回复
關注.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧