Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

4 Cara Mendapatkan Riwayat Pekerjaan SQL Server

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 dengan sysjobs_view lihat atau sysjobs 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menerapkan Indikator Kinerja SQL Server untuk Kueri, Prosedur Tersimpan, dan Pemicu

  2. Cara melihat log transaksi di SQL Server 2008

  3. Bergabung dengan beberapa tabel mengembalikan nilai NULL

  4. Hapus Server Tertaut di SQL Server menggunakan T-SQL

  5. Menggunakan hasil ekspresi (mis. Panggilan fungsi) dalam daftar parameter prosedur tersimpan?