SQL Server代理作业超时

问题描述:

我刚刚安排了一个计划的SQL Server作业,运行时间比平时长,而且我可以真正完成设置超时以在一定时间后停止它。SQL Server代理作业超时

我可能在这方面有点盲目,但我似乎无法找到一种设置工作超时的方法。有谁知道如何做到这一点?

谢谢

+1

+1有作业编辑器没有明显的“超时”属性。我对人们想出的东西感兴趣。 – Tomalak 2009-10-19 13:18:30

+0

我想你必须在SQL中添加一个WAITFOR类型的设置。 – 2009-10-19 13:25:55

我们做类似下面的代码为夜间作业处理子系统的一部分 - 它比这其实在现实中更复杂;例如,我们正在处理多个相互依赖组的工作,并从配置表中的作业名称和超时值读 - 但是这抓住了主意:

DECLARE @JobToRun NVARCHAR(128) = 'My Agent Job' 
DECLARE @dtStart DATETIME = GETDATE(), @dtCurr DATETIME 
DECLARE @ExecutionStatus INT, @LastRunOutcome INT, @MaxTimeExceeded BIT = 0 
DECLARE @TimeoutMinutes INT = 180 

EXEC msdb.dbo.sp_start_job @JobToRun 
SET @dtCurr = GETDATE() 
WHILE 1=1 
BEGIN 
    WAITFOR DELAY '00:00:10' 
    SELECT @ExecutionStatus=current_execution_status, @LastRunOutcome=last_run_outcome 
    FROM OPENQUERY(LocalServer, 'set fmtonly off; exec msdb.dbo.sp_help_job') where [name] = @JobToRun 
    IF @ExecutionStatus <> 4 
    BEGIN -- job is running or finishing (not idle) 
     SET @dtCurr=GETDATE() 
     IF DATEDIFF(mi, @dtStart, @dtCurr) > @TimeoutMinutes 
     BEGIN 
      EXEC msdb.dbo.sp_stop_job @[email protected]     
      -- could log info, raise error, send email etc here 
     END 
     ELSE 
     BEGIN 
      CONTINUE 
     END 
    END 
    IF @LastRunOutcome = 1 -- the job just finished with success flag 
    BEGIN 
     -- job succeeded, do whatever is needed here 
     print 'job succeeded'         
    END 

END 

这是什么类型的工作?您可能需要考虑将整个作业放在While循环中的TSQL脚本中。检查的条件显然是当前时间和工作开始时间之间的时间差。

拉吉

+0

有了这份特定的工作,我可以把它分开......我只是希望可能有一个“适当的”解决方案。 谢谢 – 2009-10-19 13:42:45