[杂]SQL Server 之 Service Broker

由于某些原因,我们的缓存依赖于数据库,而数据库反向通知需要依赖和使用ServiceBroker, 由于Deploy的人往往不是很清楚这个SB需要如何部署,特此记录。

判断数据库是否启用了Service Broker

Select DATABASEpRoPERTYEX(DBName,'IsBrokerEnabled')

-- 1表示已经启用   0表示没有启用

启动Service Broker

ALTER DATABASE DBname SET NEW_BROKER WITH ROLLBACK IMMEDIATE;

ALTER DATABASE DBname _ICS SET ENABLE_BROKER;

订阅者事件依旧无法触发,系统日志15517号错误

(Attach/Detach,Backup/Restore),Possibly can make this mistake:"An exception occurred while enqueueing a message in the target queue. Error: 15517, State: 1. Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.",So Query Notification Couldn't work,try this:ALTER AUTHORIZATION ON DATABASE::[Your DB Name] TO [sa].

如果数据库是附加分离或者备份还原恢复操作过后,则可能出现该错误,需要将数据库的AUTHORIZATION 改为sa

另外注意:

使用 SqlDependency 订阅查询通知必须向SQL Server Service Broker提供制定规则的查询语句,一般来讲,必须是简单的sql查询语句(不能用*,不能用top,不能用函数,包括聚合函数,不能用子查询,包括where后的子查询,不能用外连接,自连接,不能用临时表,不能用变量,不能用视图,不能垮库,表名之前必须加类似dbo数据库所有者这样的前缀)例如:select * from table1,select column1 from table1,select count(*) from table1 都是错误的sql查询语句,select column1 from dbo.table1 则是正确的语句。

你可能感兴趣的:(SQL Server)