所以我做了当时唯一能想到的事情。这对我来说是愚蠢的。
ALTER DATABASE ... SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
现在,我试图从那个错误中清理出来。我尝试做的第一件事是改变发送服务器上的ROUTE,使它们匹配。这似乎不起作用 - 现在发件人的sys.transmission_queue说"无法找到目标服务名称" 。而且我很难过 - 我看到接收器上的服务,我不相信我用它改变了什么。我通过SSMS从框中编写CREATE ROUTE脚本,然后使用sys.databases中service_broker_guid的结果更改代理实例,用于接收数据库。
查看有经纪人的探查器跟踪,我看到(在接收服务器上)这些消息:
Could not forward the message because forwarding is disabled in this SQL Server instance.
The message could not be delivered because it could not be classified.
Enable broker message classification trace to see the reason for the failure.
接下来是对发件人进行端点清理,从sys.transmission_queue中拉出conversation_handle并使用它来结束它。
更新:好的,所以我已经清理了msdb.sys.transmission_queue,但我仍然有一个15GB的MSDB,它必须是服务代理(没有表使用超过几MB的那个我可以看到)。考虑到在那里做NEW_BROKER,因为我已经关闭了一切。但这似乎仍然是一个坏主意。
接收器是一个R2盒子,只需修补到SP3。
此时此刻,我感到茫然。任何帮助赞赏。提前谢谢。
答案 0 :(得分:1)
我们遇到了这个问题,其中服务代理突然并且莫名其妙地停止传递消息,它们只是在sys.transmission_queue
累积,并且分析器跟踪显示错误消息Could not forward the message because forwarding is disabled in this SQL Server instance.
执行此命令修复它:
alter endpoint ServiceBrokerEndpoint for service_broker (message_forwarding=enabled)
..这是奇怪的,因为我们从未禁用过消息转发,从来没有必须明确启用它。