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