![](/img/trans.png)
[英]How to automatically STOP SQL Server Agent when no jobs are running?
[英]How to handle SQL Server Agent jobs when server is down
我們有一個每小時運行一次的SQL Server代理作業。 每月兩次,服務器重新啟動以進行Microsoft修補。 重新啟動由不同的部門完成,因此我們只知道它將在特定日期的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'
sp_procoption
系統存儲過程可用於在SQL Server服務啟動時運行一個(或多個)用戶定義的存儲過程。 必須在master
數據庫中創建存儲過程以供此系統SP使用。 然后,您可以創建一個存儲過程,以查詢msdb
表以查找非活動的特定(或任何發布中描述的)作業,然后使用sp_start_job
運行關聯的作業。 必須啟用scan for startup procs
服務器配置選項的scan for startup procs
才能使用sp_procoption
,但是執行此存儲過程會自動啟用此命令,您可以使用sp_configure
進行驗證。 下面是添加通過sp_procoption
啟動SQL Server服務時要執行的存儲過程的示例。
USE [master]
EXEC SP_PROCOPTION @ProcName = 'uspCheckInactiveJobs', @OptionName = 'startup', @OptionValue = 'on';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.