SQL作业状态

时间:2020-03-06 14:38:39  来源:igfitidea点击:

我实际上正在SQL 2005中处理SP。使用SP我正在创建作业并将其计划为特定时间。由于数据库非常庞大,因此这些作业至少需要5到10分钟才能完成。但是我不知道如何检查作业的状态。我想知道它是否已成功完成或者执行中是否有任何错误。在异常情况下,我还返回正确的错误代码。但是我不知道在哪里可以检查此错误代码。

解决方案

这是我可以找到的,也许可以解决问题:

  • SP获取当前的工作活动。
exec msdb.dbo.sp_help_jobactivity  @job_id = (your job_id here)

我们可以执行此SP并将结果放在临时表中,然后从那里获得所需的结果。

否则,请查看以下表:

  • msdb.dbo.sysjobactivity
  • msdb.dbo.sysjobhistory

运行以下命令以查看这些表之间的关联。

exec sp_helptext sp_help_jobactivity

-在Query analizer中复制并正确格式化,以便我们轻松理解
-使用查询执行任务(作业)
exec msdb.dbo.sp_start_job @job_name ="作业名称",@ server_name =服务器名称
-执行查询后检查是否已完成
将@JobId声明为varchar(36)
从sysjobs中选择@JobId = job_id,其中name ='工作名称'
将@JobStatus声明为int set @JobStatus = -1
而@JobStatus <= -1
开始
-根据工作提供TimeDelay
选择@JobStatus = isull(run_status,-1)
来自sysjobactivity JA,sysjobhistory JH
其中JA.job_history_id = JH.instance_id和JA.job_id = @JobId
结尾
选择@JobStatus

null =正在运行
1 =成功结束
0 =错误完成

-一旦工作完成,我们将获得结果

我从这里得到了更好的代码

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