一位同事在为特定数据库启用 Service Broker 时遇到了问题。SQL Server 不断抛出错误,指出 Service Broker 已在运行。检查数据库时,Service Broker 选项被禁用。
事实证明,该数据库是使用另一个数据库的备份创建的,并且逻辑名称没有更改。原始数据库确实启用了 Service Broker。
所以总而言之,我们有:
DB1
具有逻辑名称foo
并foo_log
启用了 Service BrokerDB2
具有逻辑名称foo
并foo_log
禁用 Service Broker
我们无法启动 Service Broker,DB2
因为 SQL Server 表示它已经在运行。数据库指向不同的.mdf
&.ldf
文件。
为什么 Service Broker 使用逻辑名称而不是数据库名称?我一直以为逻辑名的范围仅限于单个数据库?
编辑
这是用于启用 Service Broker 的 SQL 语句
ALTER DATABASE DB2 SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
错误是:
Msg 9772, Level 16, State 1, Line 1
The Service Broker in database "DB2" cannot be enabled because there is already an enabled Service Broker with the same ID.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.