从Service Broker调用时,存储过程失败,但从SSMS运行

时间:2014-07-29 14:42:23

标签: sql sql-server-2008-r2 service-broker

我们在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中的其他任务如何继续执行。

我不知道在哪里观看以及如何追踪它,所以任何麻烦的拍摄技巧都会非常感激。

1 个答案:

答案 0 :(得分:0)

服务代理作为后台进程需要以某些用户身份运行。在我的代理安装中,我通常为此创建了一个特殊用户(即Broker_User),拥有对其执行任何内容的权限,而不是其他内容。

如果该服务的授权帐户或代理队列激活程序被撤销,事情就会失败。

要真正追踪这一点,我们需要知道:

  • 队列的详细信息(创建语句等)
  • 上面引用的激活程序的详细信息
  • 有关相关帐户的信息

其中一个使用EXECUTE AS的SP内部的代码也可能会在帐户被删除或撤销时导致问题。