SQL Server 2014 Service Broker不会激活从队列接收消息的过程

pep*_*epr 2 sql-server service-broker sql-server-2014

这种情况与SQL Service Broker密切相关- 通信场景 - 从SQL 2008 R2迁移到SQL 2014SQL Service Broker - 一个中心SQL和更多的卫星SQL ...初学者希望了解详细信息.

从SQL Server 2008 R2 Standard Ed迁移后.到SQL Server 2014 Standard Ed.,相同的代码不起作用.防火墙设置为允许通信.

sys.transmission_queue(在发送者和接收者服务器)保持空的,并且GenericQueue(我的队列标识符)接收消息.但是,附加到(接收SQL服务器)的过程:

ALTER QUEUE [GenericQueue]
    WITH ACTIVATION (
    STATUS = ON,
    MAX_QUEUE_READERS = 1,
    PROCEDURE_NAME = [usp_CentralActivation],
    EXECUTE AS OWNER);
Run Code Online (Sandbox Code Playgroud)

未激活.我已将日志消息放入内部以获得有形证据 - 该过程未被调用.

我没有观察到任何错误信息或指示 - 或者我不知道在哪里寻找指示.我怎样才能找到问题所在?我应该在这里发布什么信息以帮助找到原因?

安装服务代理的代码是从模板生成的,除了机器标识(IP地址作为字符串)之外,完全相同的代码在SQL Server 2008 R2上运行良好.

可能EXECUTE AS OWNER是原因吗?谁是谁OWNER

Rem*_*anu 6

盲目猜测.试试这个:

EXECUTE AS USER = 'dbo';
Run Code Online (Sandbox Code Playgroud)

如果此操作失败,则数据库所有者SID在本地无效(在还原或文件复制后经常发生).解决方案很简单:

ALTER AUTHORIZATION ON DATABASE::<dbname> TO [sa];
Run Code Online (Sandbox Code Playgroud)

如果您仍有问题,请查看了解Queue Monitors.查看sys.dm_broker_queue_monitors并查看1)队列存在,2)状态为RECEIVES_OCCURING