SQL 服务器:按执行分组的作业历史记录
SQL Server : job history group by execution
SQL Server jobs history - job execution id?的副本
因为还没有解决方案
我需要复制 SSMS 作业历史记录。仅显示作业名称、执行日期、状态和持续时间
到目前为止,table像sysjobhistory
一样没有关于如何通过执行对实例进行分组的信息。
然后是 sysjobactivity
table:
我只是不明白为什么有时值是 NULL
有办法解决吗?
似乎人们总是忘记 SSMS 没有对 SQL 服务器的一些 special/magical 洞察力。
您可以通过启动探查器并打开作业历史记录来了解 SSMS 如何获取所有信息 window。
削减SQL代码(从Profiler获得)如下:
declare @tmp_sp_help_jobhistory table( ..... )
insert into @tmp_sp_help_jobhistory
exec msdb.dbo.sp_help_jobhistory
@job_id = '9c6901d0-b325-4d14-bd88-22bb50c323af',
@mode='FULL'
SELECT
tshj.instance_id AS [InstanceID],
tshj.sql_message_id AS [SqlMessageID],
tshj.message AS [Message],
.....
FROM @tmp_sp_help_jobhistory as tshj
ORDER BY [InstanceID] ASC
查看 sp_help_jobhistory
的代码,您会发现它调用了 sp_help_jobhistory_full
。 SQL 代码非常简单。
仔细查看输出,您会发现作业总是从第 1 步开始到第 0 步结束(摘要详细信息)。要生成组编号:
WITH JobData AS(
SELECT sjh.instance_id, -- This is included just for ordering purposes
sj.job_id,
sj.name AS job_name,
sjh.step_id,
sjh.step_name,
sjh.sql_message_id,
sjh.sql_severity,
sjh.message,
sjh.run_status,
sjh.run_date,
sjh.run_time,
sjh.run_duration,
sjh.retries_attempted,
sjh.server,
-- Every Job has Step 1 (starting step) and Step 0 (Job outcome details)
-- Calculate Groups based on this
ROW_NUMBER() OVER ( PARTITION BY step_id ORDER BY instance_id ) AS StepRn
FROM msdb.dbo.sysjobhistory AS sjh
INNER JOIN msdb.dbo.sysjobs_view AS sj ON sj.job_id = sjh.job_id
),
JobDataWithGroups AS(
SELECT a.*, FirstStep.StepRn AS JobRunNumber
FROM JobData AS a
-- Get First Step Group Number
CROSS APPLY( SELECT TOP 1 StepRn FROM JobData AS FirstStep WHERE FirstStep.instance_id <= a.instance_id AND FirstStep.step_id = 1 ORDER BY instance_id DESC ) AS FirstStep
)
SELECT *
FROM JobDataWithGroups
ORDER BY instance_id
输出
SQL Server jobs history - job execution id?的副本 因为还没有解决方案
我需要复制 SSMS 作业历史记录。仅显示作业名称、执行日期、状态和持续时间
到目前为止,table像sysjobhistory
一样没有关于如何通过执行对实例进行分组的信息。
然后是 sysjobactivity
table:
我只是不明白为什么有时值是 NULL
有办法解决吗?
似乎人们总是忘记 SSMS 没有对 SQL 服务器的一些 special/magical 洞察力。
您可以通过启动探查器并打开作业历史记录来了解 SSMS 如何获取所有信息 window。
削减SQL代码(从Profiler获得)如下:
declare @tmp_sp_help_jobhistory table( ..... )
insert into @tmp_sp_help_jobhistory
exec msdb.dbo.sp_help_jobhistory
@job_id = '9c6901d0-b325-4d14-bd88-22bb50c323af',
@mode='FULL'
SELECT
tshj.instance_id AS [InstanceID],
tshj.sql_message_id AS [SqlMessageID],
tshj.message AS [Message],
.....
FROM @tmp_sp_help_jobhistory as tshj
ORDER BY [InstanceID] ASC
查看 sp_help_jobhistory
的代码,您会发现它调用了 sp_help_jobhistory_full
。 SQL 代码非常简单。
仔细查看输出,您会发现作业总是从第 1 步开始到第 0 步结束(摘要详细信息)。要生成组编号:
WITH JobData AS(
SELECT sjh.instance_id, -- This is included just for ordering purposes
sj.job_id,
sj.name AS job_name,
sjh.step_id,
sjh.step_name,
sjh.sql_message_id,
sjh.sql_severity,
sjh.message,
sjh.run_status,
sjh.run_date,
sjh.run_time,
sjh.run_duration,
sjh.retries_attempted,
sjh.server,
-- Every Job has Step 1 (starting step) and Step 0 (Job outcome details)
-- Calculate Groups based on this
ROW_NUMBER() OVER ( PARTITION BY step_id ORDER BY instance_id ) AS StepRn
FROM msdb.dbo.sysjobhistory AS sjh
INNER JOIN msdb.dbo.sysjobs_view AS sj ON sj.job_id = sjh.job_id
),
JobDataWithGroups AS(
SELECT a.*, FirstStep.StepRn AS JobRunNumber
FROM JobData AS a
-- Get First Step Group Number
CROSS APPLY( SELECT TOP 1 StepRn FROM JobData AS FirstStep WHERE FirstStep.instance_id <= a.instance_id AND FirstStep.step_id = 1 ORDER BY instance_id DESC ) AS FirstStep
)
SELECT *
FROM JobDataWithGroups
ORDER BY instance_id
输出