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