问题:在SQL Server 2000中监控长期运行的任务是一项复杂的任务。问题在于只有在第一项任务完成之后,才会写入执行历史(日志)。因此,如果第一步( 或者只有一步) 的任务运行了很长的时间,那么将无法查询任何系统表或者方法来得到它的开始时间。
在本文中,我们将探讨用T-SQL修复来检索关于长期运行任务的信息并解决这个问题。
快速标识长期运行SQL Server任务
一个可以轻松解决这个问题的方法是在任务中添加虚拟的第一步。虚拟的这一步必须完成一项简单而快速的任务,如SELECT GETDATE()。在添加这个步骤之后,当下一步的任务执行时,sysjobhistory表就会被监控。Sysjobhistory表中第一步骤的run_date和run_time域将显示这一步完成的日期和时间,因此,它也将显示下一步开始的日期和时间。
这个例子是在第二个步骤开始两分钟之后显示的运行任务列表:
怎样在复杂的环境下监控长期运行的SQL Server任务?
如果在许多服务器上运行上百个SQL任务,该怎么办呢?如果任务是由外部供应商建立的,你无法在任务之前增加步骤,又该怎么办?
添加另外一个步骤到所有现有的任务中可能会相当的耗时或者不被允许。
让我们来讨论另一个检测长期运行SQL任务的方法。
在此处,我的目标是在一个位置上集中检查长期运行的任务,收集相关的信息并存入中央表中。注意:在我的环境下的长期运行SQL Server 2000任务运行的时间是超过4到4.5个小时。
在SQL Server 2000 Enterprise Manager中,任务状态显示在任务列表中:
如果在任务列表面板打开的时候,你运行SQL Profiler来监控运行的情况时,你将得到以下结果:
exec msdb..sp_help_job
由于我要将任务结果存储在中央表中,因此,我不能使用sp_help_job存储过程。
如果你执行INSERT… EXEC msdb..sp_help_job这个命令,将输出结果保存在表中,那么由于存储过程sp_help_job调用了内部存储过程,因此这个命令将失败。