dbo.sysjobhistory (Transact-SQL)
Se aplica a: SQL Server Azure SQL Instancia administrada
Contiene información sobre la ejecución de trabajos programados por el Agente SQL Server.
Nota:
En la mayoría de los casos, los datos se actualizan solo una vez completado el paso de trabajo y la tabla normalmente no contiene registros para los pasos de trabajo que están actualmente en curso. En algunos casos, los procesos subyacentes proporcionan información sobre los pasos de trabajo en curso.
Esta tabla se almacena en la msdb
base de datos.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
instance_id |
int | Identificador único de la fila. |
job_id |
uniqueidentifier | Id. del trabajo. |
step_id |
int | Id. del paso en el trabajo. |
step_name |
sysname | Nombre del paso. |
sql_message_id |
int | Identificador de cualquier mensaje de error de SQL Server devuelto si se produjo un error en el trabajo. |
sql_severity |
int | Gravedad de cualquier error de SQL Server. |
message |
nvarchar(4000) | Texto, si existe, de un error de SQL Server. |
run_status |
int | Estado de la ejecución del trabajo:0 = Error1 = Correcto2 = Reintento3 = Cancelado4 = En curso |
run_date |
int | Fecha de ejecución iniciada del trabajo o del paso, en yyyyMMdd formato. Para un historial en curso, este valor es la fecha y hora en que se escribió el historial. |
run_time |
int | Hora en que se inició el trabajo o el paso en HHmmss formato. |
run_duration |
int | Tiempo transcurrido en la ejecución del trabajo o paso en HHmmss formato para períodos de tiempo de hasta 24 horas. Busque código para traducir duraciones de ejecución más largas en el ejemplo. |
operator_id_emailed |
int | Id. del operador al que se notificó la terminación del trabajo. |
operator_id_netsent |
int | Id. del operador al que se notificó con un mensaje la terminación del trabajo. |
operator_id_paged |
int | Id. del operador al que se notificó por buscapersonas la terminación del trabajo. |
retries_attempted |
int | Número de intentos de ejecución del trabajo o paso. |
server |
sysname | Nombre del servidor en el que se ejecutó el trabajo. |
Ejemplos
La siguiente consulta transact-SQL convierte las run_date
columnas y run_time
en una columna datetime denominada .LastRunStartDateTime
La run_duration
columna se convierte en una columna int denominada LastRunDurationSeconds
. A continuación, estas dos columnas se usan para calcular .LastRunFinishDateTime
La run_duration
columna también se convierte en un formato más fácil de usar. Puede ejecutar el script en SQL Server Management Studio o 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