Partilhar via


dbo.sysjobhistory (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL Managed Instance

Contém informações sobre a execução de trabalhos agendados pelo SQL Server Agent.

Observação

Na maioria dos casos, os dados só são atualizados após a conclusão do passo do trabalho, e a tabela normalmente não contém registos dos passos do trabalho que estejam em curso. Em alguns casos, os processos subjacentes fornecem informações sobre as etapas do trabalho em andamento.

Esta tabela está armazenada na msdb base de dados.

Nome da coluna Tipo de dados Description
instance_id int Identificador único para a linha.
job_id uniqueidentifier ID do trabalho.
step_id int Identificação do passo no trabalho.
step_name sysname Nome da etapa.
sql_message_id int ID de qualquer mensagem de erro SQL Server deveria se o trabalho falhasse.
sql_severity int Gravidade de qualquer erro do SQL Server.
message Nvarchar(4000) Texto, se houver, de um erro no SQL Server.
run_status int Estado da execução do trabalho:

0 = Falhou
1 = Sucedeu
2 = Retentativa
3 = Cancelado
4 = Em Progresso
run_date int Data a execução da tarefa ou início do passo, em yyyyMMdd formato de formato. Para uma história em progresso, este valor é a data e hora em que a história foi escrita.
run_time int Hora em que o trabalho ou passo começou no HHmmss formato.
run_duration int Tempo decorrido na execução da tarefa ou do formato step HHmmss in períodos de tempo até 24 horas. Encontre código para traduzir durações de longa duração no exemplo.
operator_id_emailed int Identificação do operador notificada quando o trabalho foi concluído.
operator_id_netsent int ID do operador notificado por uma mensagem quando o trabalho foi concluído.
operator_id_paged int ID do operador notificado por pager quando o trabalho foi concluído.
retries_attempted int Número de tentativas de repetição para a tarefa ou etapa.
server sysname Nome do servidor onde a tarefa foi executada.

Examples

A consulta Transact-SQL seguinte converte as run_date colunas e run_time numa coluna de data-hora chamada LastRunStartDateTime. A run_duration coluna é convertida numa coluna int chamada LastRunDurationSeconds. Estas duas colunas são então usadas para calcular o LastRunFinishDateTime. A run_duration coluna é também convertida para um formato mais fácil de utilizar. Podes executar o script no SQL Server Management Studio ou 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