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