在服务器上设置了一个正在运行的Service Broker,我们正在迁移到新服务器,但我似乎无法在新机器上设置Service Broker。
对数据库中的启用代理进行了明显的(对我而言),删除路由,服务,合同,队列甚至消息类型并重新添加它们,设置ALTER QUEUE with STATUS ON
SELECT * FROM sys.service_queues
给我一个队列列表,包括我自己的两个队列,显示为activation_enabled,receive_enabled等。
毋庸置疑,队列不起作用。当我把消息丢进他们时,没有任何东西进入并且没有任何结果。
有什么想法吗?我确信我错过了一些非常明显的事情......
答案 0 :(得分:35)
在黑暗中拍摄:
ALTER AUTHORIZATION ON DATABASE::[restored db name] TO [sa];
已还原数据库的dbo是在原始服务器上创建数据库的Windows SID。这可以是在新服务器上没有意义的本地SID(例如,SERVERNAME \ user)。此问题通常会影响已激活的过程,并且可能影响邮件传递,这两个问题都是由于SQL无法模拟“dbo”而发生的。将dbo更改为有效的登录SID(如sa)将修复它。
如果这不能解决问题,那么您需要追踪消息的去向。如果它们保留在sys.transmission_queue中,那么您必须检查transmission_status。如果它们到达目标队列但未激活,请检查ERRORLOG。如果它们消失,则表示您执行fire-and-forget(SEND紧接着是END),因此您将删除指示原因的错误消息。本文Troubleshooting Dialogs包含了更多提示。
最后,但并非最不重要的是,尝试使用ssbdiagnose.exe。
答案 1 :(得分:7)
除了Remus的回答,您可能还想检查restoredDB的BrokerEnabled属性。每当还原数据库时,还原的数据库的BrokerEnabled属性都设置为False。因此,没有任何内容会进入您的队列。解决这个问题: