如何在 X 分钟后终止 SQL 服务器代理作业?
How to terminate the SQL server agent job after X minutes?
我在 SQL 代理下的 MS SQL 服务器上有一份工作 运行。该作业基本上运行一个 dtsx 包,每 5 分钟 运行。如果 运行 超过 4 分钟,作业是否会自动终止?通常作业会在 3 秒内完成。
下面的方法可能会解决这个问题(我们得到的有点不同 - 我们有一个存储过程来评估,如果作业是 运行 预先执行然后执行 exec):你可以得到运行时通过 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)
我在 SQL 代理下的 MS SQL 服务器上有一份工作 运行。该作业基本上运行一个 dtsx 包,每 5 分钟 运行。如果 运行 超过 4 分钟,作业是否会自动终止?通常作业会在 3 秒内完成。
下面的方法可能会解决这个问题(我们得到的有点不同 - 我们有一个存储过程来评估,如果作业是 运行 预先执行然后执行 exec):你可以得到运行时通过 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)