dbo.sysjobhistory (Transact-SQL)
Berlaku untuk: SQL Server Azure SQL Managed Instance
Berisi informasi tentang eksekusi pekerjaan terjadwal oleh SQL Server Agent.
Catatan
Dalam kebanyakan kasus, data diperbarui hanya setelah langkah pekerjaan selesai, dan tabel biasanya tidak berisi rekaman untuk langkah-langkah pekerjaan yang saat ini sedang berlangsung. Dalam beberapa kasus, proses yang mendasar memang memberikan informasi tentang langkah-langkah pekerjaan yang sedang berlangsung.
Tabel ini disimpan dalam msdb
database.
Nama kolom | Jenis data | Deskripsi |
---|---|---|
instance_id |
int | Pengidentifikasi unik untuk baris. |
job_id |
pengidentifikasi unik | ID Pekerjaan. |
step_id |
int | ID langkah dalam pekerjaan. |
step_name |
nama sysname | Nama langkah. |
sql_message_id |
int | ID pesan kesalahan SQL Server dikembalikan jika pekerjaan gagal. |
sql_severity |
int | Tingkat keparahan kesalahan SQL Server apa pun. |
message |
nvarchar(4000) | Teks, jika ada, dari kesalahan SQL Server. |
run_status |
int | Status eksekusi pekerjaan:0 = Gagal1 = Berhasil2 = Coba lagi3 = Dibatalkan4 = Sedang Berlangsung |
run_date |
int | Tanggal pekerjaan atau langkah memulai eksekusi, dalam yyyyMMdd format. Untuk riwayat Sedang Berlangsung, nilai ini adalah tanggal dan waktu riwayat ditulis. |
run_time |
int | Waktu pekerjaan atau langkah dimulai dalam HHmmss format. |
run_duration |
int | Waktu yang berlalu dalam eksekusi pekerjaan atau langkah dalam HHmmss format untuk periode waktu hingga 24 jam. Temukan kode untuk menerjemahkan durasi eksekusi yang lebih lama dalam contoh. |
operator_id_emailed |
int | ID operator akan diberi tahu ketika pekerjaan selesai. |
operator_id_netsent |
int | ID operator diberi tahu oleh pesan ketika pekerjaan selesai. |
operator_id_paged |
int | ID operator diberi tahu oleh pager ketika pekerjaan selesai. |
retries_attempted |
int | Jumlah upaya coba lagi untuk pekerjaan atau langkah. |
server |
nama sysname | Nama server tempat pekerjaan dijalankan. |
Contoh
Kueri Transact-SQL berikut mengonversi run_date
kolom dan run_time
menjadi kolom tanggalwaktu bernama LastRunStartDateTime
. Kolom run_duration
dikonversi menjadi kolom int bernama LastRunDurationSeconds
. Kedua kolom ini kemudian digunakan untuk menghitung LastRunFinishDateTime
. Kolom run_duration
juga dikonversi menjadi format yang lebih mudah digunakan. Anda dapat menjalankan skrip di SQL Server Management Studio atau 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