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