我的SQL Server實例具有一個代理作業Grand Master
,該作業每分鐘,每週7天,每天運行一次。儘管出現錯誤處理,SQL代理作業在一個步驟上仍然失敗
我創建了另一個需要手動運行的作業。它需要做的第一件事情是禁用並停止Grand Master
作業在其處於活動狀態時運行。
步驟1是禁用GM,其正常工作:
exec msdb..sp_update_job @job_name = "Grand Master", @Enabled = 0
步驟2中,但是失敗。它的工作是阻止GM運行IF它正在運行。這是不應該做任何事情,如果通用汽車當前沒有運行:
if exists (select 1
from msdb.dbo.sysjobs_view j
join msdb.dbo.sysjobactivity a on j.job_id = a.job_id
where a.run_requested_date is not null
and a.stop_execution_date is null
and j.name = 'Grand Master')
begin
exec msdb.dbo.sp_stop_job 'Grand Master'
end
我每次運行此作業,無論通用汽車的狀態,它不能在步驟2中,出現此錯誤:
Executed as user: NT AUTHORITY\SYSTEM. SQLServerAgent Error: Request to stop job Grand Master (from User NT AUTHORITY\SYSTEM) refused because the job is not currently running. [SQLSTATE 42000] (Error 22022). The step failed.
有沒有人有任何想法?
這是不是因爲sp_stop_job試圖停止作業,而且它沒有運行?如果您不首先檢查它是否正在運行,並且它是否運行sp_stop_job? – Leonidas199x
感謝您的評論@ Leonidas199x'if exists ...'查詢測試以查看作業是否正在運行。如果作業沒有運行,那麼該查詢將返回一個空集,並且該步驟不應該執行任何操作並轉到步驟3 – Cam
只是一個建議,但您是否嘗試切換這兩個步驟?首先停止它,如果它正在運行,然後禁用這項工作?可能SQL Server誤解了這個想法來停止一個被禁用的工作... – Tyron78