使用作业开始时间查看 SQL Server 中正在运行的作业的脚本

zer*_*bug 18 sql-server sql-server-agent

如何编写脚本以查看 SQL Server 中正在运行的作业和作业开始时间?

SELECT sj.name, 
 sja.run_requested_date, 
 CONVERT(VARCHAR(12), sja.stop_execution_date-sja.start_execution_date, 114) Duration
FROM msdb.dbo.sysjobactivity sja
INNER JOIN msdb.dbo.sysjobs sj
ON sja.job_id = sj.job_id
WHERE sja.run_requested_date IS NOT NULL
ORDER BY sja.run_requested_date desc;
Run Code Online (Sandbox Code Playgroud)

Ken*_*her 58

我发布一个查询获得当前正在运行的任务的列表而回这里

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)

这有作业名称、作业 ID、开始时间以及它正在运行的步骤。如果您点击上面的链接,您可以获得更多关于我是如何提出它的以及还有什么可用的详细信息。

  • 不幸的是,此脚本假定当前运行的步骤是最后一个完成的步骤之后的步骤。情况并非总是如此。 (6认同)

小智 5

我在查询 MSDB 表(也称为上面列出的代码)的一台服务器上遇到了问题,因为我的一项作业将开始运行,但事实并非如此。有一个系统存储过程可以返回执行状态,但是执行 insert exec 语句时不能不出错。其中包含另一个系统存储过程,可以与 insert exec 语句一起使用。

INSERT INTO #Job
EXEC master.dbo.xp_sqlagent_enum_jobs 1,dbo
Run Code Online (Sandbox Code Playgroud)

以及将其加载到的表:

CREATE TABLE #Job 
           (job_id               UNIQUEIDENTIFIER NOT NULL,  
           last_run_date         INT              NOT NULL,  
           last_run_time         INT              NOT NULL,  
           next_run_date         INT              NOT NULL,  
           next_run_time         INT              NOT NULL,  
           next_run_schedule_id  INT              NOT NULL,  
           requested_to_run      INT              NOT NULL, -- BOOL  
           request_source        INT              NOT NULL,  
           request_source_id     sysname          COLLATE database_default NULL,  
           running               INT              NOT NULL, -- BOOL  
           current_step          INT              NOT NULL,  
           current_retry_attempt INT              NOT NULL,  
           job_state             INT              NOT NULL) 
Run Code Online (Sandbox Code Playgroud)


小智 0

以下脚本返回:

  • 职位名称
  • 职位编号
  • 作业请求时间
  • 作业执行时间
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)

  • 对我来说,这个查询返回了实际上没有运行的已禁用作业 (4认同)