我们在SQL Server 2008R2中使用Service Broker作为一个简单的作业调度程序。我们向经纪人发送消息,并将其设置为在请求的日期/时间处理。
我们有一个工作(存储过程),可以通过Sharepoint站点中的用户操作自动安排,并且它已经运行了大约一年。此存储过程创建2个表(如果它们不存在),如果它们存在则截断它们,然后调用其他2个存储过程(串行)来填充每个表。
几个星期前,两个存储过程中的第二个在主程序" job"是由SB发起的。如果我进入SSMS,我可以执行" job"存储过程,它运行完成没有问题(即两个被调用的存储过程执行没有问题,并且两个表都被填充)。
我们公司以其无限的智慧决定终止设立Service Broker并编写这些存储过程的人。我理解存储过程,并开始对SB进行一些处理,但我不知道为什么第二个存储过程将从SSMS执行,但是从Service Broker调用时失败。 / p>
我唯一能想到的是服务是用这个命令创建的:
CREATE SERVICE [//ScheduledJobService]
AUTHORIZATION [user ID]
ON QUEUE [dbo].[ScheduledJobQueue] ([//ScheduledJobContract])
在他停止工作的那天,他的身份证件发生了什么事。但是,这并不能说明为什么部分代码会执行,以及Service Broker中的其他任务如何继续执行。
我不知道在哪里观看以及如何追踪它,所以任何麻烦的拍摄技巧都会非常感激。
答案 0 :(得分:0)
服务代理作为后台进程需要以某些用户身份运行。在我的代理安装中,我通常为此创建了一个特殊用户(即Broker_User
),拥有对其执行任何内容的权限,而不是其他内容。
如果该服务的授权帐户或代理队列激活程序被撤销,事情就会失败。
要真正追踪这一点,我们需要知道:
其中一个使用EXECUTE AS
的SP内部的代码也可能会在帐户被删除或撤销时导致问题。