sql-server - 数据库恢复后 Service Broker 不工作

标签 sql-server service-broker

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

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

从sys.service_queues中选择*

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

不用说队列不起作用。当我将消息放入其中时,什么也没有进来,也没有任何东西出来。

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

最佳答案

只是在黑暗中拍摄:

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 .

关于sql-server - 数据库恢复后 Service Broker 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2928836/

相关文章:

sql-server - DISTINCT NULL 在 SQL Server 中返回单个 NULL

sql-server - 在 SQL Server 中从 CSV 列创建表,而不使用游标

sql-server - 使用 sql server 作为背板时 SignalR 不工作

sql-server - 将 SQL 服务代理与队列与 Web 服务结合使用

sql - 使用 T-SQL 中另一个(非 XML)列的值更新 XML

sql - SQL Server 执行计划中的并行性

SQL Server 架构最佳实践

sql-server - SQL Server Service Broker——处理 SQL Server 实例之间两阶段提交的建议

sql-server - 激活脚本挂起,无法关闭

sql-server - 如何快速关闭 Microsoft SQL Server Service Broker 的所有元素?