完成SET NEW_BROKER后,无法找到"目标服务名称"

时间:2015-07-01 20:05:43

标签: service-broker

我犯了一个错误。在意识到SB导致崩溃(并且已经有一段时间)后,我修补了它。现在,我在队列中备份了数百万条消息,它试图赶上来自其他机器的消息,并且磁盘空间不足。即使有4位读者也落后了。

所以我做了当时唯一能想到的事情。这对我来说是愚蠢的。

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。

此时此刻,我感到茫然。任何帮助赞赏。提前谢谢。

1 个答案:

答案 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)

..这是奇怪的,因为我们从未禁用过消息转发,从来没有必须明确启用它。