私は実際に SQL 2005 で SP に取り組んでいます。SP を使用してジョブを作成し、特定の時間にスケジュールしています。データベースが非常に大きいため、これらのジョブは完了するまでに少なくとも 5 ~ 10 分かかります。しかし、ジョブのステータスを確認する方法がわかりません。正常に完了したか、実行中にエラーが発生したかを知りたいです。例外では、適切なエラー コードも返します。しかし、このエラーコードを確認できる場所がわかりません。
3 に答える
これは私が見つけることができるものです、多分それはあなたの問題を解決します:
- 現在のジョブ アクティビティを取得するための SP。
exec msdb.dbo.sp_help_jobactivity @job_id = (your job_id here)
この SP を実行し、結果を一時テーブルに配置して、そこから必要な結果を取得できます。
それ以外の場合は、次の表をご覧ください。
msdb.dbo.sysjobアクティビティ
msdb.dbo.sysjobhistory
以下を実行して、これらのテーブル間の関連付けを確認します。
exec sp_helptext sp_help_jobactivity
ここからより良いコードを取得しました
Use msdb
go
select distinct j.Name as "Job Name", j.description as "Job Description", h.run_date as LastStatusDate,
case h.run_status
when 0 then 'Failed'
when 1 then 'Successful'
when 3 then 'Cancelled'
--when 4 then 'In Progress'
end as JobStatus
from sysJobHistory h, sysJobs j
where j.job_id = h.job_id and h.run_date =
(select max(hi.run_date) from sysJobHistory hi where h.job_id = hi.job_id)
order by 1
--Query analizer にコピーし、適切にフォーマットして、簡単に理解できるようにします --クエリを使用してタスク (ジョブ) を実行するには exec msdb.dbo.sp_start_job @job_name ='ジョブ名',@server_name = サーバー名 -- 実行後@JobId を varchar(36) として宣言 @JobId = job_id を sysjobs から選択 name = 'Your Job Name' @JobStatus を int として宣言 @JobStatus = -1 While @JobStatus <= -1 Begin -- ジョブに応じて TimeDelay を指定します @JobStatus = isnull(run_status ,-1) from sysjobactivity JA,sysjobhistory JH where JA.job_history_id = JH.instance_id and JA.job_id = @JobId End select @JobStatus
null = 実行中 1 = 正常に終了 0 = エラーで終了
-- ジョブが終了すると、結果が得られます