Ton*_*nyP 51 t-sql sql-server sql-server-2008 sql-agent
我需要知道给定的作业当前是否在Ms SQL 2008服务器上运行.因此,不要再次调用可能导致并发问题的相同工作.
Ada*_*ger 66
看起来你可以使用msdb.dbo.sysjobactivity,检查具有非null start_execution_date和null stop_execution_date的记录,这意味着作业已经启动,但尚未完成.
这将为您提供当前正在运行的作业:
SELECT sj.name
, sja.*
FROM msdb.dbo.sysjobactivity AS sja
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id
WHERE sja.start_execution_date IS NOT NULL
AND sja.stop_execution_date IS NULL
Run Code Online (Sandbox Code Playgroud)
Nir*_*raj 35
我找到了Kenneth Fisher的更好答案.以下查询仅返回当前正在运行的作业:
SELECT
ja.job_id,
j.name AS job_name,
ja.start_execution_date,
ISNULL(last_executed_step_id,0)+1 AS current_executed_step_id,
Js.step_name
FROM msdb.dbo.sysjobactivity ja
LEFT JOIN msdb.dbo.sysjobhistory jh ON ja.job_history_id = jh.instance_id
JOIN msdb.dbo.sysjobs j ON ja.job_id = j.job_id
JOIN msdb.dbo.sysjobsteps js
ON ja.job_id = js.job_id
AND ISNULL(ja.last_executed_step_id,0)+1 = js.step_id
WHERE
ja.session_id = (
SELECT TOP 1 session_id FROM msdb.dbo.syssessions ORDER BY agent_start_date DESC
)
AND start_execution_date is not null
AND stop_execution_date is null;
Run Code Online (Sandbox Code Playgroud)
您可以通过msdb.dbo.sysjobactivity在select子句中的表中添加更多列来获取有关作业的更多信息.
Fra*_*isi 15
给定一份工作(我假设你知道它的名字),你可以使用:
EXEC msdb.dbo.sp_help_job @Job_name = 'Your Job Name'
Run Code Online (Sandbox Code Playgroud)
正如MSDN作业帮助过程中所建议的那样.它返回有关作业的许多信息(所有者,服务器,状态等).
小智 13
EXEC msdb.dbo.sp_help_job @Job_name = 'Your Job Name'
Run Code Online (Sandbox Code Playgroud)
检查字段execution_status
0 - 仅返回非空闲或暂停的作业.
1 - 执行.
2 - 等待线程.
3 - 重试之间.
4 - 闲着.
5 - 暂停.
7 - 执行完成操作.
如果需要执行结果,请检查字段last_run_outcome
0 =失败
1 =成功
3 =取消
5 =未知
https://msdn.microsoft.com/en-us/library/ms186722.aspx
| 归档时间: |
|
| 查看次数: |
193538 次 |
| 最近记录: |