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 = Falha1 = Bem sucedido2 = Tentar novamente3 = Cancelado4 = 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