服务器关闭时如何处理SQL Server代理作业

时间:2019-02-07 18:30:34

标签: sql-server

我们有一个每小时运行一次的SQL Server代理作业。每月两次,服务器将重新启动以进行Microsoft修补。重新启动是由其他部门完成的,因此我们只知道它将在特定日期的4小时窗口内发生。服务器恢复后,是否有办法自动执行在此时间范围内未启动的任何作业?

2 个答案:

答案 0 :(得分:4)

据我所知,没有“内置”方式。但是也许您可以执行另一项工作,检查SQL Server的上次重新启动日期。

SELECT sqlserver_start_time FROM sys.dm_os_sys_info

然后,如果它检测到服务器不久前已重新启动,它可以检查您的作业上次运行的时间。

select j.job_id, name,  last_run_date, last_run_time, last_run_outcome, last_run_duration 
from msdb.dbo.sysjobs as j (NoLOCK)          
inner join msdb.dbo.sysjobservers as s (NOLOCK) on s.job_id = j.job_id
where enabled=1 

如果需要,告诉SQL立即开始工作

EXEC msdb.dbo.sp_start_job N'YourJobName'

答案 1 :(得分:2)

sp_procoption系统存储过程可用于在SQL Server服务启动时运行一个(或多个)用户定义的存储过程。必须在master数据库中创建存储过程 ,该系统SP才能使用该存储过程。然后,您可以创建一个存储过程,该查询过程在msdb表中查找处于非活动状态的特定(或任何您所描述的)作业,然后使用sp_start_job运行关联的作业。必须启用scan for startup procs服务器配置选项才能使用sp_procoption,但是执行此存储过程会自动启用它,您可以使用sp_configure进行验证。下面是添加存储过程以在通过sp_procoption启动SQL Server服务时执行的示例。

USE [master]

EXEC SP_PROCOPTION @ProcName = 'uspCheckInactiveJobs', @OptionName = 'startup', @OptionValue = 'on';