问题描述
我有一个在 sql 代理下的 MS sql Server 上运行的作业。该作业基本上运行一个 dtsx 包,并且每 5 分钟运行一次。如果作业运行超过 4 分钟,是否有办法自动终止?通常,作业会在 3 秒内完成。
解决方法
以下方法可能会解决这个问题(我们的理解有点不同——我们有一个存储过程来评估作业是否预先运行然后执行 exec):您可以通过 a 获取所需作业的运行时间SQL查询:
WITH cte AS(
SELECT sj.name,sja.start_execution_date,ROW_NUMBER() OVER (ORDER BY sja.start_execution_date DESC) AS rn
FROM msdb.dbo.sysjobactivity AS sja
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id
WHERE sja.start_execution_date IS NOT NULL
AND sja.stop_execution_date IS NULL
AND sj.name LIKE '%myJobName%'
)
SELECT DATEDIFF(SECOND,start_execution_date,GETDATE())/60. AS RunTimeMinutes
FROM cte
WHERE rn = 1
您可以将其加载到变量中。在下一步中,您可以执行以下操作:
IF @MyVar >= 4 THEN EXEC '[msdb].[dbo].[sp_stop_job] N' + char(39) + 'myJobName' + char(39)