Share via


dbo.sysjobhistory (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

SQL Server エージェントによるスケジュールされたジョブの実行に関する情報が含まれます

Note

ほとんどの場合、データはジョブ ステップが完了した後にのみ更新され、テーブルには通常、現在進行中のジョブ ステップのレコードは含まれなくなります。 場合によっては、基になるプロセス によって進行中のジョブ ステップに関する情報が 提供されます。

このテーブルはデータベースに msdb 格納されます。

列名 データ型 説明
instance_id int 行の一意識別子。
job_id uniqueidentifier ジョブ ID。
step_id int ジョブ ステップの ID。
step_name sysname ステップの名前。
sql_message_id int ジョブが失敗した場合に返される SQL Server エラー メッセージの ID。
sql_severity int SQL Server エラーの重大度。
message nvarchar (4000) SQL Server エラーのテキスト (存在する場合)。
run_status int ジョブ実行のステータス。

0 = 失敗
1 = 成功
2 = 再試行
3 = キャンセル済み
4 = 進行中
run_date int ジョブまたはステップが実行を開始した日付 ( yyyyMMdd 形式)。 進行中の履歴の場合、この値は履歴が書き込まれた日時です。
run_time int ジョブまたはステップが開始された時刻を形式で指定 HHmmss します。
run_duration int ジョブまたはステップ HHmmss の実行の経過時間 (最大 24 時間の形式)。 この例では、実行時間を長く変換するコードを 見つけます
operator_id_emailed int ジョブが完了したときに通知されるオペレーターの ID。
operator_id_netsent int ジョブが完了したときにメッセージによって通知されるオペレーターの ID。
operator_id_paged int ジョブの終了時にポケットベルの通知を受けるオペレーターの ID。
retries_attempted int ジョブまたはステップの再試行回数。
server sysname ジョブが実行されたサーバーの名前。

次の Transact-SQL クエリは、and run_time 列を run_date datetime という名前LastRunStartDateTime列に変換します。 このrun_duration列は、int という名前LastRunDurationSeconds列に変換されます。 次に、これら 2 つの列を使用して、 LastRunFinishDateTime. 列も run_duration 、よりわかりやすい形式に変換されます。 このスクリプトは、SQL Server Management Studio または 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