在服务器上设置一个可用的 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/