Поделиться через


dbo.sysjobhistory (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Содержит сведения о выполнении запланированных заданий агент SQL Server.

Примечание.

В большинстве случаев данные обновляются только после завершения шага задания, а таблица обычно не содержит записей для шагов задания, которые в настоящее время выполняются. В некоторых случаях базовые процессы предоставляют сведения о шагах выполнения задания.

Эта таблица хранится в msdb базе данных.

Имя столбца Тип данных Description
instance_id int Уникальный идентификатор строки.
job_id uniqueidentifier Идентификатор задания.
step_id int Идентификатор этапа в задании.
step_name sysname Назовите шаг.
sql_message_id int Идентификатор любого сообщения об ошибке SQL Server, возвращаемого в случае сбоя задания.
sql_severity int Серьезность любой ошибки SQL Server.
message nvarchar(4000) Текст, если таковой имеется, ошибки SQL Server.
run_status int Состояние выполнения задания.

0 = сбой
1 = успешно выполнено
2 = повторная попытка
3 = отменено
4 = ход выполнения
run_date int Дата выполнения задания или шага в yyyyMMdd формате. Для журнала выполнения это значение — дата и время записи журнала.
run_time int Время запуска задания или шага в HHmmss формате.
run_duration int Истекло время выполнения задания или шага в HHmmss формате до 24 часов. Найдите код для перевода длительности выполнения в примере.
operator_id_emailed int Идентификатор оператора, уведомленного о завершении задания.
operator_id_netsent int Идентификатор оператора, уведомленного при помощи сообщения о завершении задания.
operator_id_paged int Идентификатор оператора, уведомленного по пейджеру о завершении задания.
retries_attempted int Количество повторных попыток выполнения задания или этапа.
server sysname Имя сервера, на котором выполнялось задание.

Примеры

Следующий запрос Transact-SQL преобразует run_date столбцы и run_time столбцы в столбец datetime с именем LastRunStartDateTime. Столбец run_duration преобразуется в столбец int с именем LastRunDurationSeconds. Затем эти два столбца используются для вычисления LastRunFinishDateTime. Столбец run_duration также преобразуется в более удобный для пользователя формат. Скрипт можно запустить в SQL Server Management Studio или Azure Data Studio.

SET NOCOUNT ON;

SELECT sj.name AS Name,
    sh.step_name AS StepName,
    shp.LastRunStartDateTime,
    DATEADD(SECOND, shp.LastRunDurationSeconds, shp.LastRunStartDateTime) AS LastRunFinishDateTime,
    shp.LastRunDurationSeconds,
    CASE
        WHEN sh.run_duration > 235959
            THEN CAST((CAST(LEFT(CAST(sh.run_duration AS VARCHAR),
                LEN(CAST(sh.run_duration AS VARCHAR)) - 4) AS INT) / 24) AS VARCHAR)
                    + '.' + RIGHT('00' + CAST(CAST(LEFT(CAST(sh.run_duration AS VARCHAR),
                LEN(CAST(sh.run_duration AS VARCHAR)) - 4) AS INT) % 24 AS VARCHAR), 2)
                    + ':' + STUFF(CAST(RIGHT(CAST(sh.run_duration AS VARCHAR), 4) AS VARCHAR(6)), 3, 0, ':')
        ELSE STUFF(STUFF(RIGHT(REPLICATE('0', 6) + CAST(sh.run_duration AS VARCHAR(6)), 6), 3, 0, ':'), 6, 0, ':')
        END AS [LastRunDuration (d.HH:MM:SS)],
    DATEADD(SECOND, shp.LastRunDurationSeconds, shp.LastRunStartDateTime) AS LastRunFinishDateTime
FROM msdb.dbo.sysjobs sj
INNER JOIN msdb.dbo.sysjobhistory sh ON sj.job_id = sh.job_id
CROSS APPLY (SELECT DATETIMEFROMPARTS(sh.run_date / 10000, -- years
        sh.run_date % 10000 / 100, -- months
        sh.run_date % 100, -- days
        sh.run_time / 10000, -- hours
        sh.run_time % 10000 / 100, -- minutes
        sh.run_time % 100, -- seconds
        0 -- milliseconds
    ) AS LastRunStartDateTime,
    (sh.run_duration / 10000) * 3600 -- convert hours to seconds, can be greater than 24
    + ((sh.run_duration % 10000) / 100) * 60 -- convert minutes to seconds
    + (sh.run_duration % 100) AS LastRunDurationSeconds
) AS shp;
GO