如何配置Schedule SQL Job在SQL Server Agent启动15分钟后自动执行
SQL Server Agent启动后延迟特定作业执行的配置方法
完全可以实现需求,以下是两种常用的可行方案:
方案1:在目标作业开头添加等待步骤(配置最简单)
不需要修改原有作业的触发条件,保持「SQL Server Agent启动时自动启动」的配置即可,仅需在原有作业的所有步骤之前,新增一个优先级最高的T-SQL步骤:
- 步骤类型选择「Transact-SQL 脚本(T-SQL)」
- 数据库选择
master - 命令内容为:
WAITFOR DELAY '00:15:00'; - 配置该步骤执行成功后,跳转到原有作业的第一个业务步骤即可。
该方案的优势是无需新增额外作业,配置成本极低;缺点是作业运行记录会显示作业总运行时长包含这15分钟等待时间,如果你需要统计作业实际业务执行时长可以选择方案2。
方案2:通过辅助启动作业创建一次性延迟调度(无等待时长统计干扰)
如果不希望作业运行记录包含等待时长,可以通过一个轻量辅助作业实现:
- 先取消原作业的「SQL Server Agent启动时自动启动」触发配置
- 新建一个辅助作业,触发条件设置为「SQL Server Agent启动时自动启动」,该作业仅包含一个T-SQL步骤,命令内容如下:
DECLARE @target_job_id UNIQUEIDENTIFIER -- 替换下方N'你的目标作业名称'为实际要延迟执行的作业的真实名称 SELECT @target_job_id = job_id FROM msdb.dbo.sysjobs WHERE name = N'你的目标作业名称' -- 为目标作业添加15分钟后执行的一次性调度 EXEC msdb.dbo.sp_add_jobschedule @job_id = @target_job_id, @name = N'启动延迟15分钟一次性调度', @enabled = 1, @freq_type = 1, -- 调度类型为一次性执行 @active_start_date = CONVERT(VARCHAR(8), GETDATE(), 112), -- 执行日期为当前日期,格式YYYYMMDD @active_start_time = REPLACE(CONVERT(VARCHAR(5), DATEADD(MINUTE, 15, GETDATE()), 108), ':', '') + '00' -- 执行时间为当前时间+15分钟,格式HHMMSS
- 配置辅助作业的步骤执行成功后直接退出作业即可。
该方案的优势是辅助作业仅执行1次调度创建逻辑就会结束,不会长期占用会话,目标作业的运行记录只会统计实际业务执行的时长,不会包含15分钟等待时间。
两种方案都不需要设置固定周期调度,每次SQL Server Agent重启时都会自动触发对应逻辑,保证作业必跑且延迟15分钟执行。
内容的提问来源于stack exchange,提问作者Kartikeya
相关产品推荐
相关产品推荐

