我可以在所有数据库上打开服务代理吗?

时间:2015-03-20 17:50:50

标签: sql-server service-broker

我有一个拥有200多个数据库的多租户数据库服务器。我可以在所有这些数据库上打开服务代理而不影响服务器的性能吗?这对服务器有很大影响吗?

1 个答案:

答案 0 :(得分:4)

激活数据库上的Service Broker需要对数据库进行独占访问,换句话说,需要终止所有现有连接,并且需要回滚未提交的事务。您需要查询sys.databases并设置动态SQL语句以遍历数据库以激活所有这些数据库上的Service Broker。没有用于在所有数据库上激活Service Broker的服务器级命令。

在您开始在这些队列上创建消息类型,合同,队列和服务并开始累积数据之前,激活Service Broker不会对服务器产生影响。

这是激活Service Broker的代码,请再次注意,因为它将终止所有连接并回滚所有未提交的事务。

ALTER DATABASE MyDatabase
SET ENABLE_BROKER 
WITH ROLLBACK IMMEDIATE 
GO 

在激活Service Broker之前,您可以运行快速查询以查看它是否已被激活。

SELECT is_broker_enabled FROM sys.databases WHERE name = 'MyDatabase'

这是我在上一个客户端实现Service Broker时发现非常有用的基本Service Broker演练的一个很棒的链接。

https://www.simple-talk.com/sql/learn-sql-server/service-broker-foundations-workbench/