Condividi tramite


dbo.sysjobhistory (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

Contiene informazioni sull'esecuzione di processi pianificati da SQL Server Agent.

Nota

Nella maggior parte dei casi, i dati vengono aggiornati solo dopo il completamento del passaggio del processo e la tabella in genere non contiene record per i passaggi di processo attualmente in corso. In alcuni casi, i processi sottostanti forniscono informazioni sui passaggi del processo in corso.

Questa tabella viene archiviata nel msdb database.

Nome colonna Tipo di dati Descrizione
instance_id int Identificatore univoco della riga.
job_id uniqueidentifier ID del processo.
step_id int ID del passaggio del processo.
step_name sysname Nome del passaggio.
sql_message_id int ID di un messaggio di errore di SQL Server restituito se il processo non è riuscito.
sql_severity int Gravità di qualsiasi errore di SQL Server.
message nvarchar(4000) Testo, se disponibile, di un errore di SQL Server.
run_status int Stato di esecuzione del processo:

0 = Non riuscito
1 = Riuscito
2 = Riprovare
3 = Annullato
4 = In corso
run_date int Data in cui il processo o il passaggio ha avviato l'esecuzione, in yyyyMMdd formato . Per una cronologia In corso, questo valore è la data e l'ora in cui è stata scritta la cronologia.
run_time int Ora in cui il processo o il passaggio è stato avviato nel HHmmss formato.
run_duration int Tempo trascorso nell'esecuzione del processo o del passaggio in HHmmss formato per periodi di tempo fino a 24 ore. Trovare il codice per tradurre durate di esecuzione più lunghe nell'esempio.
operator_id_emailed int ID dell'operatore che ha ricevuto una notifica tramite posta elettronica al termine dell'esecuzione del processo.
operator_id_netsent int ID dell'operatore che ha ricevuto un messaggio al termine dell'esecuzione del processo.
operator_id_paged int ID dell'operatore che ha ricevuto una notifica tramite cercapersone al termine dell'esecuzione del processo.
retries_attempted int Numero di tentativi di esecuzione del processo o del passaggio.
server sysname Nome del server in cui è stato eseguito il processo.

Esempi

La query Transact-SQL seguente converte le run_date colonne e run_time in una colonna datetime denominata LastRunStartDateTime. La run_duration colonna viene convertita in una colonna int denominata LastRunDurationSeconds. Queste due colonne vengono quindi usate per calcolare .LastRunFinishDateTime La run_duration colonna viene anche convertita in un formato più semplice da usare. È possibile eseguire lo script in SQL Server Management Studio o In 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