数据库还原后Service Broker无法正常工作

时间:2010-05-28 12:15:29

标签: sql-server service-broker

在服务器上设置了一个正在运行的Service Broker,我们正在迁移到新服务器,但我似乎无法在新机器上设置Service Broker。

对数据库中的启用代理进行了明显的(对我而言),删除路由,服务,合同,队列甚至消息类型并重新添加它们,设置ALTER QUEUE with STATUS ON

SELECT * FROM sys.service_queues

给我一​​个队列列表,包括我自己的两个队列,显示为activation_enabled,receive_enabled等。

毋庸置疑,队列不起作用。当我把消息丢进他们时,没有任何东西进入并且没有任何结果。

有什么想法吗?我确信我错过了一些非常明显的事情......

2 个答案:

答案 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。因此,没有任何内容会进入您的队列。解决这个问题:

  • 右键单击SSMS中的restoredDB>转到“属性”> “选项”> 向下滚动到“Service Broker”组并验证“Broker”的值 启用“属性。如果设置为False,请将其更改为True,然后将其更改为True 应该解决你的问题。