![如何获取 SQL 代理作业的状态?](https://linux22.com/image/505023/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%20SQL%20%E4%BB%A3%E7%90%86%E4%BD%9C%E4%B8%9A%E7%9A%84%E7%8A%B6%E6%80%81%EF%BC%9F.png)
我们使用在 SQL 2000 服务器上运行的 SQL 代理作业每十分钟从我们的业务系统导入一次数据。该作业运行多个步骤,通常需要大约 5 到 6 分钟才能运行。这些数据用于各种包装过程。
这通常会顺利运行,但有时我们会遇到某个步骤“卡住”的问题,这意味着我们无法从业务系统中获取新数据。
我想在办公室的屏幕上显示作业的状态,以便我们查看是否存在问题。我是否可以在数据库上执行查询以返回作业的状态,如果作业正在运行,处于哪个步骤,运行了多长时间以及下次计划运行的时间?
答案1
下面的代码将为您提供所有作业的状态,并且应该得到进一步的支持,否则使用 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'
答案2
SQL Server 代理将作业数据记录到 msdb..sys作业历史记录您可以使用该表来跟踪作业和作业步骤的成功/失败并查看其是否正在运行。
您可以使用msdb..sysjobschedules计算出下一次预定的运行时间。
答案3
我经常使用以下查询来确定 SQL Server 上当前正在运行的内容。它不会具体说明正在运行哪个代理,但它可以让您了解当前正在执行哪些特定查询:
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