私の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に失敗します
誰にもアイデアはありますか?
これは、sp_stop_jobがジョブを停止しようとしているだけでなく、実行していないためですか?最初に実行されているかどうかをチェックしていないか、sp_stop_jobが実行されているかどうかを確認する必要がありますか? – Leonidas199x
コメントありがとう@ Leonidas199x 'if exists ...'クエリは、ジョブが実行されているかどうかを確認するためにテストします。ジョブが実行されていない場合、そのクエリーは空のセットを返し、ステップは何もせずステップ3に進みます – Cam
ちょっとした提案ですが、2つのステップを切り替えようとしましたか?実行中の場合はまず停止してからジョブを無効にしますか?おそらくSQL Serverは、無効なジョブを停止するという考えを間違って解釈します。 – Tyron78