Agent Job可以通过TSQL 脚本来管理,管理Agent Job的SP过程位于msdb数据库的dbo 架构下,常用的功能是启动一个job。
一,启动一个Job
用户创建一个Job之后,可以使用TSQL脚本来启动一个job,返回0表示成功开始Job,返回1表示启动Job失败。
msdb.dbo.sp_start_job {[@job_name =] 'job_name' | [@job_id =] job_id }
[ , [@error_flag =] error_flag]
[ , [@server_name =] 'server_name']
[ , [@step_name =] 'step_name']
[ , [@output_flag =] output_flag]
通过job name来启动一个job:
exec msdb.dbo.sp_start_job N'Weekly Sales Data Backup' ;
二,轮询查询一个Job的状态
由于用户无法查询一个正在执行的job step,因此,当需要查询master step时,尽量创建一个轻量的start step(step_id=1),把master step放在在第二个step上,这样,就可以通过start step来预判master step 是否处于 running的状态。 下面把Loop的主题粘贴出来,仅供参考:
print 'get step history' --get step history select @InstanceId=max(js.instance_id) from msdb.dbo.sysjobhistory js with(nolock) where js.job_id=@job_id and js.step_id between 1 and 2 -- start step and master step set @StepStatus=null select @StepStatus=h.run_status from msdb.dbo.sysjobhistory h with(nolock) where h.job_id=@job_id and h.step_id=2 --master step and h.instance_id>=@InstanceId if @StepStatus is null -- step is running or @StepStatus =2 --step is retrying or @StepStatus =4 --step is running begin print 'step is running or retrying' set @Loop=@Loop+1 waitfor delay '15:00' continue -- continue loop end else -- step has completed begin print 'step has completed' select @StepStatus as RunStatusID, case @StepStatus when 0 then 'Failed' when 1 then 'Succeeded' when 3 then 'Canceled' end as RunStatus break --break loop end
参考文档: