sql-server – SQL Server代理作业超时
发布时间:2020-12-12 16:56:47 所属栏目:MsSql教程 来源:网络整理
导读:我刚刚有一个计划的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 @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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |