【问题标题】:Service Broker not working after database restore数据库还原后服务代理不工作
【发布时间】:2010-05-28 12:15:29
【问题描述】:

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

已经完成了(对我而言)显而易见的事情,例如在 DB 上启用代理,删除路由、服务、合同、队列甚至消息类型并重新添加它们,将 ALTER QUEUE 设置为 STATUS ON

从 sys.service_queues 中选择 *

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

不用说队列不起作用。当我向他们发送消息时,没有任何内容进入,也没有任何内容出现。

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

【问题讨论】:

    标签: sql-server service-broker


    【解决方案1】:

    只是在黑暗中拍摄:

    ALTER AUTHORIZATION ON DATABASE::[restored db name] TO [sa];
    

    还原数据库的 dbo 是在原始服务器上创建 db 的 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

    【讨论】:

    • Remus,像往常一样,你的“暗中射击”击中了靶心。我正在使用“fire and Forget”,我现在将对其进行补救。我认为这是您在过去几年中第三次直接帮助我处理 Service Broker 的事情,我认为您应该获得某种互联网奥斯卡奖。 =)
    • 哇 10 岁的答案仍然有帮助!谢谢兄弟:)
    【解决方案2】:

    除了 Remus 的回答之外,您可能还想检查 restoreDB 的 BrokerEnabled 属性。每当您恢复数据库时,恢复的数据库的 BrokerEnabled 属性都会设置为 False。因此,没有任何东西会进入您的队列。为了解决这个问题:

    • 在 SSMS 中右键单击 restoreDB > 转到“属性”>“选项”> 向下滚动到“Service Broker”组并验证“Broker”的值 Enabled”属性。如果设置为 False,则将其更改为 True,这样 应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多