Bagikan melalui


dbo.sysjobhistory (Transact-SQL)

Berlaku untuk:SQL ServerAzure 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 = Gagal
1 = Berhasil
2 = Coba lagi
3 = Dibatalkan
4 = 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