2017-09-05 10 views
0

私のSQL Serverインスタンスには、毎分24/7のスケジュールで実行されるGrand Masterというエージェントジョブがあります。エラー処理にもかかわらず、ステップでSQLエージェントジョブが失敗する

私は時々手作業で実行する必要がある別のジョブを作成しました。最初に行う必要がある作業の1つは、アクティブな状態でGrand Masterジョブが実行されないようにすることです。しかし失敗し、

exec msdb..sp_update_job @job_name = "Grand Master", @Enabled = 0 

ステップ2:

ステップ1が正常に動作GMを、無効にすることです。 GMの稼動を停止させることは、IFです。これは、GMが現在実行されていない場合は何もすることになっていません。

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.

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 

私は関係なく、GMの状態の、このジョブを実行するたびに、このエラーが発生してステップ2に失敗します

誰にもアイデアはありますか?

+0

これは、sp_stop_jobがジョブを停止しようとしているだけでなく、実行していないためですか?最初に実行されているかどうかをチェックしていないか、sp_stop_jobが実行されているかどうかを確認する必要がありますか? – Leonidas199x

+0

コメントありがとう@ Leonidas199x 'if exists ...'クエリは、ジョブが実行されているかどうかを確認するためにテストします。ジョブが実行されていない場合、そのクエリーは空のセットを返し、ステップは何もせずステップ3に進みます – Cam

+0

ちょっとした提案ですが、2つのステップを切り替えようとしましたか?実行中の場合はまず停止してからジョブを無効にしますか?おそらくSQL Serverは、無効なジョブを停止するという考えを間違って解釈します。 – Tyron78

答えて

0

実行中の場合は最初に停止してからジョブを無効にしてください。 SQL Serverは、無効なジョブを停止するというアイデアを誤解する可能性があります。

関連する問題