如何在SQL Server 2008中自动重新启动已停止的存储过程?

时间:2012-06-27 22:01:39

标签: sql-server sql-server-2008 stored-procedures sqlclr clrstoredprocedure

我有一个必须不断运行的存储过程。偶尔,由于目前未知的原因,它会停止。如果发生这种情况,如何让它自动重启SP?谷歌搜索没有多大帮助,因为所有结果都是关于重新启动服务器而不是存储过程。感谢您提供任何帮助。

这是一个SQLCLR存储过程,如果这有任何区别。

3 个答案:

答案 0 :(得分:1)

您无法自动重启它。这样的功能不是内置的,因为它不是程序的真正目的。

我设置了 SQL Server代理作业,每N秒执行一次(N = 1或15左右),并在需要时重新启动该程序。

您需要一种方法来检测它是否仍在运行。您可以通过让sproc在特殊标记表上保持独占锁来实现。检查过程可以从该表WITH (READPAST)中读取。如果没有行返回,则sproc仍然保持锁定,因此它必须处于活动状态。

答案 1 :(得分:0)

写另一个sp,检查第一个是否正在运行,如果没有,则将其踢掉。然而,好奇心使我感到沮丧,这件事做了什么?

答案 2 :(得分:0)

只要你有一台Rube Goldberg机器,就可以让它变得更有趣。

重写proc:

  1. 从服务代理队列中弹出消息。 “为什么”以后会变得明显。
  2. 将消息放入服务代理队列中。无论它是什么。
  3. 无论proc现在做什么。
  4. 现在,让存储过程成为队列的激活存储过程,设置max_queue_readers = 1然后你就开始了比赛。