Compartilhar via


dbo.sysjobhistory (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

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

Observação

Na maioria dos casos, os dados são atualizados somente após a conclusão da etapa de trabalho e a tabela normalmente não contém registros para etapas de trabalho que estão em andamento no momento. Em alguns casos, os processos subjacentes fornecem informações sobre as etapas de trabalho em andamento.

Essa tabela é armazenada msdb no banco de dados.

Nome da coluna Tipo de dados Descrição
instance_id int Identificador exclusivo da linha.
job_id uniqueidentifier ID do trabalho.
step_id int ID da etapa no trabalho.
step_name sysname Nome da etapa.
sql_message_id int ID de qualquer mensagem de erro do SQL Server retornada se o trabalho falhar.
sql_severity int Gravidade de qualquer erro do SQL Server.
message nvarchar(4000) Texto, se houver, de um erro do SQL Server.
run_status int O status da execução do trabalho:

0 = Falha
1 = Bem sucedido
2 = Tentar novamente
3 = Cancelado
4 = Em andamento
run_date int Data em que o trabalho ou etapa iniciou a execução, no yyyyMMdd formato. Para um histórico Em andamento, esse valor é a data e a hora em que o histórico foi gravado.
run_time int Hora em que o trabalho ou etapa foi iniciado no HHmmss formato.
run_duration int Tempo decorrido na execução do job ou etapa no HHmmss formato por períodos de tempo de até 24 horas. Encontre o código para traduzir durações de execução mais longas no exemplo.
operator_id_emailed int ID do operador notificado 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 repetidas para o trabalho ou a etapa.
server sysname Nome do servidor no qual o trabalho foi executado.

Exemplos

A consulta Transact-SQL a seguir converte as run_date colunas e run_time em uma coluna de data e hora chamada LastRunStartDateTime. A run_duration coluna é convertida em uma coluna int chamada LastRunDurationSeconds. Essas duas colunas são usadas para calcular o LastRunFinishDateTime. A run_duration coluna também é convertida em um formato mais amigável. Você pode executar o script no SQL Server Management Studio ou no 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