我有一个使用臭名昭着的火灾和忘记模式的服务(不要评判我,我没有创建它)在SQL Server 2005上工作正常。我最近升级到2012年,现在ssbdiagnose抱怨不一致激活设置:
The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured but disabled
The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured with 0 max_queue_readers
The activation settings for queue dbo.ScanSendQueue are inconsistent: Activation is configured but no procedure is specified
我试图弄清楚如何解决这个问题但是无法想象将存储过程添加到“发送”队列,但我不明白为什么这是必要的。
基本设置是:
触发调用“发送”服务,如下所示:
BEGIN DIALOG CONVERSATION @SBDialog
FROM SERVICE ScanSendService
TO SERVICE 'ScanReceiveService', 'CURRENT DATABASE'
ON CONTRACT ScanContract
WITH ENCRYPTION = OFF
“接收”服务调用存储过程然后执行不相关的操作。队列详情如下:
ALTER QUEUE [dbo].[ScanReceiveQueue] WITH STATUS = ON , RETENTION = OFF , ACTIVATION ( STATUS = ON , PROCEDURE_NAME = [dbo].[usp_Process_ScanReceiveQueue] , MAX_QUEUE_READERS = 1 , EXECUTE AS OWNER ), POISON_MESSAGE_HANDLING (STATUS = OFF)
消息使其成为“发送”队列,但不是“接收”队列。为什么ssbdiagnose抱怨这个,我该如何解决?
编辑:更多信息,因为似乎没有人有任何想法:(
我查看了Microsoft.SqlServer.ServiceBroker.Diagnostics.dll
,似乎所有这些检查都在每个队列上运行,无论是否配置了“激活”,但我甚至不知道如何配置激活。 ...
如果有兴趣的话来源:https://gist.github.com/Mansfield7/5766457#file-gistfile1-cs-L12
编辑2:我打开了该队列的激活并指定了一个什么也没做的存储过程。 ssbdiagnose错误消失,但队列仍然中断(接收队列仍为空)。
答案 0 :(得分:0)
在为该队列正确添加激活后,ssbdiagnose错误消失了,但服务仍无法正常工作。
我附加了SQL Server分析器并发现数据库不处于受信任模式,因此我运行了以下命令,它开始工作。
ALTER DATABASE [DBNAME] SET TRUSTWORTHY ON;
我仍然很想知道关于激活的ssbdiagnose警告的更多信息,但是现在我的问题已经解决了。