Dalam artikel ini, saya menyajikan empat opsi untuk mengembalikan data riwayat pekerjaan Agen Server SQL.
Opsi
Saya telah menyertakan dua opsi GUI dan dua opsi T-SQL:
- Opsi 1 :Gunakan GUI SSMS.
- Opsi 2 :Gunakan GUI Azure Data Studio (melalui ekstensi Agen Server SQL)
- Opsi 3 :Jalankan
sp_help_jobhistory
prosedur tersimpan. - Opsi 4 :Kueri
sysjobhistory
tabel (dan gabungkan dengansysjobs_view
lihat atausysjobs
meja).
Objek SQL Server Agent berada di msdb database, dan opsi T-SQL perlu dijalankan di database itu. Anda dapat melakukannya dengan beralih ke msdb database terlebih dahulu, atau dengan mengkualifikasi objek dengan tepat (mis. msdb.dbo.sysjobhistory
).
Opsi 1:Gunakan GUI SSMS
Anda dapat menggunakan GUI SQL Server Management Studio (SSMS) untuk melihat riwayat pekerjaan.
Anda dapat melakukannya dengan memperluas node SQL Server Agent di Object Explorer, lalu mengklik kanan Jobs dan memilih Lihat Riwayat dari menu kontekstual:
Ini akan membuka jendela baru dengan riwayat pekerjaan dari semua pekerjaan di dalam Penampil File Log:
Anda dapat melihat riwayat satu pekerjaan dengan membatalkan pilihan pekerjaan lain di layar ini. Atau, Anda dapat menemukan pekerjaan itu di Object Explorer dan klik kanan dari sana.
Lihat Lihat Riwayat Pekerjaan Agen SQL Server dengan SSMS untuk detail dan tangkapan layar lebih lanjut.
Opsi 2:Gunakan GUI Azure Data Studio
Jika Anda menggunakan Azure Data Studio, Anda mungkin tidak mengetahuinya, tetapi Anda juga memiliki opsi untuk melihat riwayat pekerjaan Agen Server SQL.
Cara melakukannya adalah melalui ekstensi Agen Server SQL.
Begini tampilannya:
Di layar ini, kami melihat riwayat untuk pekerjaan yang disebut BackupKrankyKranesDB .
Riwayat pekerjaan tercantum di panel kiri. Anda dapat mengklik setiap item di panel riwayat kiri untuk menampilkan detail item tersebut di panel kanan.
Pada tulisan ini, tampaknya Anda hanya dapat melihat riwayat satu pekerjaan pada satu waktu.
Lihat Melihat Riwayat Pekerjaan Agen SQL Server dengan Azure Data Studio untuk detail dan tangkapan layar lebih lanjut.
Opsi 3:sp_help_jobhistory
Prosedur Tersimpan
Jika Anda lebih suka (atau perlu) melakukan tugas Anda dengan T-SQL, maka sp_help_jobhistory
prosedur tersimpan adalah pilihan cepat dan mudah untuk Anda.
Saat Anda menelepon sp_help_jobhistory
tanpa argumen apa pun, ia mengembalikan riwayat untuk semua pekerjaan. Namun saat Anda memberikan nama atau ID pekerjaan, itu hanya mencantumkan riwayat untuk satu pekerjaan itu.
Ini contohnya:
EXEC msdb.dbo.sp_help_jobhistory;
Hasil:
Perhatikan bahwa sp_help_jobhistory
terletak di msdb database, jadi Anda perlu memastikan bahwa Anda menjalankannya dari sana. Anda dapat melakukannya dengan beralih ke database tersebut (misalnya dengan USE msdb
), atau dengan memenuhi syarat prosedur tersimpan dengan database dan skema (yaitu msdn.dbo.sp_help_jobhistory
).
Anda bisa mendapatkan riwayat satu pekerjaan dengan meneruskan ID atau nama pekerjaan itu sebagai argumen.
Contoh:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB';
Anda juga dapat menggunakan @mode parameter
untuk menentukan apakah akan mengembalikan semua kolom dalam kumpulan hasil atau tidak (FULL
), atau hanya ringkasan (SUMMARY
).
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB',
@mode = 'FULL';
Standarnya adalah SUMMARY
.
Opsi 4:sysjobhistory
Tabel
sysjobhistory
tabel adalah tabel yang menyimpan data riwayat pekerjaan.
Seperti tabel lainnya, Anda cukup melakukan sesuatu seperti ini:
SELECT * FROM msdb.dbo.sysjobhistory;
Itu akan mengembalikan semua kolom dalam tabel.
Namun, tabel ini tidak menyimpan nama pekerjaan (atau deskripsi pekerjaan, dll). Untuk mendapatkan data tersebut, Anda harus menggabungkan tabel ini dengan tabel/tampilan lain, seperti sysjobs_view
lihat atau sysjobs
meja. Itu akan memberikan kumpulan hasil yang lebih lengkap.
Di bawah ini adalah kueri yang dapat Anda gunakan untuk mengembalikan data yang lebih lengkap.
SELECT jv.name AS Job,
jh.step_name AS Step,
msdb.dbo.AGENT_DATETIME(jh.run_date, jh.run_time) AS RunDateTime,
STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(jh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') AS RunDuration
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobhistory jh
ON jv.job_id = jh.job_id
ORDER BY Job, RunDateTime;
Hasil:
Anda dapat menambahkan lebih banyak kolom ke SELECT
daftar sesuai kebutuhan.
Jika Anda bertanya-tanya mengapa kueri ini menggunakan banyak hal tambahan, seperti AGENT_DATETIME()
fungsi, STUFF()
fungsi, RIGHT()
, CAST()
, dan REPLICATE()
, itu karena cara sysjobhistory
menyimpan nilai datetimenya.
Jika saya tidak menggunakan fungsi-fungsi itu, nilai datetime akan kurang terbaca.
Khususnya, run_date
, run_time
dan run_duration
kolom menyimpan datanya sebagai int nilai-nilai. Secara default, data di kolom tersebut terlihat seperti ini:
Itu bisa menyulitkan sebagian dari kita manusia untuk membaca. Terutama run_duration
kolom. Oleh karena itu, kami menggunakan berbagai fungsi dalam kueri di atas untuk menyajikan kolom ini dalam format yang lebih mudah dibaca manusia.
Anda mungkin memperhatikan bahwa sp_help_jobhistory
prosedur tersimpan mengalami masalah yang sama.
Juga, saya harus menyebutkan bahwa AGENT_DATE()
tampaknya menjadi fungsi yang tidak terdokumentasi.