请教Service Broker 引发的死循环
描述:
在数据库服务器上创建数据库镜像(多数据库镜像);因为其中有跨库数据操作,例如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,依此下去 , 产生死循环
虽然测试比较极端,但问题却是实实在在的存在,不知道大家有什么相应的解决方案吗?谢谢