簡體   English   中英

SQL Server代理作業超時

[英]SQL Server Agent Job Timeout

我剛剛安排了一個預定的SQL Server作業運行時間超過正常時間,我真的可以設置超時以在一段時間后停止它。

我可能對此有點失明,但我似乎找不到為工作設置超時的方法。 有誰知道這樣做的方法?

謝謝

我們做了類似下面的代碼作為夜間作業處理子系統的一部分 - 它實際上比實際上更復雜; 例如,我們正在處理多個相互依賴的作業集,並從配置表中讀取作業名稱和超時值 - 但這可以捕獲這個想法:

    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 @job_name=@JobToRun                   
            -- 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腳本中。 檢查的條件顯然是當前時間和工作開始時間之間的時間差。

拉吉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM