我有一个必须不断运行的存储过程。偶尔,由于目前未知的原因,它会停止。如果发生这种情况,如何让它自动重启SP?谷歌搜索没有多大帮助,因为所有结果都是关于重新启动服务器而不是存储过程。感谢您提供任何帮助。
这是一个SQLCLR存储过程,如果这有任何区别。
答案 0 :(得分:1)
您无法自动重启它。这样的功能不是内置的,因为它不是程序的真正目的。
我设置了 SQL Server代理作业,每N秒执行一次(N = 1或15左右),并在需要时重新启动该程序。
您需要一种方法来检测它是否仍在运行。您可以通过让sproc在特殊标记表上保持独占锁来实现。检查过程可以从该表WITH (READPAST)
中读取。如果没有行返回,则sproc仍然保持锁定,因此它必须处于活动状态。
答案 1 :(得分:0)
写另一个sp,检查第一个是否正在运行,如果没有,则将其踢掉。然而,好奇心使我感到沮丧,这件事做了什么?
答案 2 :(得分:0)
只要你有一台Rube Goldberg机器,就可以让它变得更有趣。
重写proc:
现在,让存储过程成为队列的激活存储过程,设置max_queue_readers = 1然后你就开始了比赛。