我有一个必须不断运行的存储过程。有时,由于目前未知的原因,它会停止。如果发生这种情况,我怎样才能让它自动重启 SP?谷歌搜索没有多大帮助,因为所有结果都是关于重新启动服务器,而不是存储过程。谢谢你提供的所有帮助。
这是一个 SQLCLR 存储过程,如果这有什么不同的话。
我有一个必须不断运行的存储过程。有时,由于目前未知的原因,它会停止。如果发生这种情况,我怎样才能让它自动重启 SP?谷歌搜索没有多大帮助,因为所有结果都是关于重新启动服务器,而不是存储过程。谢谢你提供的所有帮助。
这是一个 SQLCLR 存储过程,如果这有什么不同的话。
您无法自动重新启动它。这样的功能不存在内置的,因为它不是程序的真正目的。
我会设置一个SQL Server 代理作业,它每 N 秒(N = 1 或 15 左右)执行一次,并在需要时重新启动该过程。
您需要一种方法来检测它是否仍在运行。你可以通过让存储过程在一个特殊的标记表上持有一个排他锁来做到这一点。检查程序可以从该表中读取WITH (READPAST)
。如果没有行返回,sproc 仍然持有锁,因此它必须处于活动状态。
As long as you've got a Rube Goldberg machine, may as make it more fun.
Re-write the proc as such:
Now, make the stored procedure the activation stored procedure for the queue, set max_queue_readers = 1 and you're off to the races.
编写另一个 sp 来检查第一个是否正在运行,如果没有则启动它。好奇心让我心烦意乱,这东西有什么作用?