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

ror*_*yok 14 sql-server service-broker

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

已经做了明显的(对我来说)像DB上的启用代理,丢弃路由,服务,合同,队列甚至消息类型并重新添加它们,使用STATUS ON设置ALTER QUEUE

SELECT*FROM sys.service_queues

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

不用说队列不起作用.当我把消息丢进他们时,没有任何东西进入,什么都没有出来.

有任何想法吗?我确信我错过了一些非常明显的东西......

Rem*_*anu 35

只是在黑暗中拍摄:

ALTER AUTHORIZATION ON DATABASE::[restored db name] TO [sa];
Run Code Online (Sandbox Code Playgroud)

已还原数据库的dbo是在原始服务器上创建数据库的Windows SID.这可以是在新服务器上没有意义的本地SID(例如,SERVERNAME\user).此问题通常会影响已激活的过程,并可能影响邮件传递,这两个问题都是由于SQL无法模拟"dbo"而发生的.将dbo更改为有效的登录SID(如sa)将修复它.

如果这不能解决问题,那么您需要追踪消息的去向.如果它们保留在sys.transmission_queue中,那么您必须检查transmission_status.如果它们到达目标队列但未激活,请检查ERRORLOG.如果它们消失了,这意味着你做发射后不管(SEND年底紧接着),因此您要删除指示原因的错误消息.本文疑难解答对话框包含更多提示.

最后,但并非最不重要的是,尝试使用ssbdiagnose.exe.


Min*_*nas 7

除了Remus的答案,您可能还想检查restoredDB的BrokerEnabled属性.每当还原数据库时,还原的数据库的BrokerEnabled属性都设置为False.因此,没有任何内容会进入您的队列.要解决这个问题:

  • 右键单击SSMS中的restoredDB> goto"属性">"选项">向下滚动到"Service Broker"组并验证"Broker Enabled"属性的值.如果设置为False,请将其更改为True,这可以解决您的问题.