我们使用在SQL 2000服务器上运行的SQL代理作业,每10分钟从我们的业务系统导入数据。 这项工作需要多个步骤,通常需要5到6分钟的时间才能完成。 这些数据用于各种包装过程。
这通常运行没有问题,但有时我们会遇到一些问题,一个步骤会“卡住”,这意味着我们没有从业务系统获得新的数据。
我想在办公室的屏幕上显示工作状态,以便我们看看是否有问题。 是否有一个查询,我可以在数据库上执行,以返回一个作业的状态,如果它正在运行,它在哪一步,它运行了多长时间,以及下一次计划运行的时间?
下面的代码将给你所有工作的状态,应该支持前进,否则使用msdb..sysjobhistory应该做的伎俩。
exec msdb..sp_help_job -- gives you all jobs and a status for each exec msdb..sp_help_job @job_id = 'job_id GUID from sysjobs' exec msdb..sp_help_job @job_name = 'job name'
SQL Server代理将作业数据logging到msdb..sysjobhistory您可以使用该表来跟踪作业和作业步骤的成功/失败并查看其是否正在运行。
您可以使用msdb..sysjobschedules计算下一个计划的运行时间。
我经常使用以下查询来确定当前正在SQL服务器上运行的内容。 它不是特定的代理正在运行,但它给你一个特定的查询或查询当前正在执行的概念:
USE Master GO select text, * from sys.dm_exec_requests CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 order by 1 GO