恢复数据库后如何恢复Service Broker?

问题描述

在其他服务器上恢复数据库后,Service broker 停止。 恢复的 db 有一个 Trustworthy Off,现在我将它设置为 On 以再次运行 broker。 我知道这是不好的做法。尤其是在阅读了 solomon-rutzky 的文章之后。 我已经按照 Solomon 的建议使用 sqlCLR UNSAFE 函数,而没有将数据库设置为 TRUSTWORTHY ON。它工作正常!

如果 TRUSTWORTHY OFF,如何恢复 broker 工作?

解决方法

运行 Service Broker 不需要值得信赖。但是,您可以将一个选项传递给 RESTORE 语句,这可能正是您所需要的。引用 the docs

ENABLE_BROKER

指定 Service Broker 消息传递是 在恢复结束时启用,以便可以发送消息 立即地。默认情况下禁用 Service Broker 消息传递 在恢复期间。数据库保留现有的 Service Broker 标识符。

如果你没有这样做,还有希望!恢复后,您可以发出 alter databse [yourDB] set enable_broker;。请注意,这需要独占数据库访问权限,因此您可能还需要添加 with rollback immediate 或类似的 alter database 语句。