次の方法で共有


dbo.sysjobhistory (Transact-SQL)

適用対象: SQL Server Azure 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 ジョブまたはステップの実行の経過時間 (最大 24 時間の HHmmss 形式)。 exampleで実行時間を長く変換するコードを検索します。
operator_id_emailed int ジョブが完了したときに通知されるオペレーターの ID。
operator_id_netsent int ジョブが完了したときにメッセージによって通知されるオペレーターの ID。
operator_id_paged int ジョブの終了時にポケットベルの通知を受けるオペレーターの ID。
retries_attempted int ジョブまたはステップの再試行回数。
server sysname ジョブが実行されたサーバーの名前。

次の Transact-SQL クエリは、run_date列とrun_time列を LastRunStartDateTime という名前の datetime 列に変換します。 run_duration列は、LastRunDurationSecondsという名前の int 列に変換されます。 次に、これら 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