dbo.sysjobhistory (Transact-SQL)

Gilt für:SQL ServerAzure SQL Managed Instance

Enthält Informationen zur Ausführung geplanter Aufträge durch die SQL Server-Agent.

Hinweis

In den meisten Fällen werden die Daten erst nach Abschluss des Auftragsschritts aktualisiert, und die Tabelle enthält in der Regel keine Datensätze für Auftragsschritte, die derzeit ausgeführt werden. In einigen Fällen stellen zugrunde liegende Prozesse Informationen zu laufenden Auftragsschritten bereit.

Diese Tabelle wird in der msdb Datenbank gespeichert.

Spaltenname Datentyp BESCHREIBUNG
instance_id int Eindeutiger Bezeichner für die Zeile.
job_id uniqueidentifier Auftrags-ID.
step_id int ID des Schritts im Auftrag.
step_name sysname Name des Schritts.
sql_message_id int DIE ID einer SQL Server-Fehlermeldung, die zurückgegeben wird, wenn der Auftrag fehlgeschlagen ist.
sql_severity int Schweregrad eines SQL Server-Fehlers.
message nvarchar(4000) Text( falls vorhanden) eines SQL Server-Fehlers.
run_status int Status der Auftragsausführung:

0 = Fehlgeschlagen
1 = Erfolgreich
2 = Wiederholen
3 = Abgebrochen
4 = In Bearbeitung
run_date int Datum, an dem der Auftrag oder der Schritt gestartet wurde, im yyyyMMdd Format. Für einen In Progress-Verlauf ist dieser Wert das Datum und die Uhrzeit, zu der der Verlauf geschrieben wurde.
run_time int Zeit, zu der der Auftrag oder der Schritt im HHmmss Format begonnen hat.
run_duration int Verstrichene Zeit bei der Ausführung des Auftrags oder Schritts im HHmmss Format für Zeiträume bis zu 24 Stunden. Suchen Sie Code zum Übersetzen längerer Laufzeiten im Beispiel.
operator_id_emailed int ID des Operators, der bei Abschluss des Auftrags benachrichtigt wurde.
operator_id_netsent int ID des Operators, der bei Abschluss des Auftrags durch eine Meldung benachrichtigt wurde.
operator_id_paged int ID des Operators, der mithilfe eines Pagers bei Abschluss des Auftrags benachrichtigt wurde.
retries_attempted int Anzahl der Wiederholungsversuche für den Auftrag oder Schritt.
server sysname Name des Servers, auf dem der Auftrag ausgeführt wurde.

Beispiele

Die folgende Transact-SQL-Abfrage konvertiert die Spalten und die run_date Spalten in eine Datetime-Spalte mit dem Namen LastRunStartDateTime.run_time Die run_duration Spalte wird in eine Int-Spalte mit dem Namen LastRunDurationSecondskonvertiert. Diese beiden Spalten werden dann zum Berechnen der LastRunFinishDateTime. Die run_duration Spalte wird auch in ein benutzerfreundlicheres Format konvertiert. Sie können das Skript in SQL Server Management Studio oder Azure Data Studio ausführen.

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