2017-09-05 33 views
0

我的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.

有沒有人有任何想法?

+0

這是不是因爲sp_stop_job試圖停止作業,而且它沒有運行?如果您不首先檢查它是否正在運行,並且它是否運行sp_stop_job? – Leonidas199x

+0

感謝您的評論@ Leonidas199x'if exists ...'查詢測試以查看作業是否正在運行。如果作業沒有運行,那麼該查詢將返回一個空集,並且該步驟不應該執行任何操作並轉到步驟3 – Cam

+0

只是一個建議,但您是否嘗試切換這兩個步驟?首先停止它,如果它正在運行,然後禁用這項工作?可能SQL Server誤解了這個想法來停止一個被禁用的工作... – Tyron78

回答

0

首先停止它,如果它正在運行,然後禁用該作業。 SQL Server可能會誤解停止禁用作業的想法...

相關問題