我剛剛安排了一個計劃的SQL Server作業,運行時間比平時長,而且我可以真正完成設置超時以在一定時間後停止它。SQL Server代理作業超時
我可能在這方面有點盲目,但我似乎無法找到一種設置工作超時的方法。有誰知道如何做到這一點?
謝謝
我剛剛安排了一個計劃的SQL Server作業,運行時間比平時長,而且我可以真正完成設置超時以在一定時間後停止它。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 @[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腳本中。檢查的條件顯然是當前時間和工作開始時間之間的時間差。
拉吉
有了這份特定的工作,我可以把它分開......我只是希望可能有一個「適當的」解決方案。 謝謝 – 2009-10-19 13:42:45
+1有作業編輯器沒有明顯的「超時」屬性。我對人們想出的東西感興趣。 – Tomalak 2009-10-19 13:18:30
我想你必須在SQL中添加一個WAITFOR類型的設置。 – 2009-10-19 13:25:55