Apa alat yang bagus untuk memvisualisasikan pekerjaan SQL Agent? [Tutup]


14

Saya menemukan alat MS SQL Studio bawaan untuk mengelola pekerjaan Agen menjadi sedikit frustasi. Alat apa di sana yang menurut Anda bermanfaat?

Begitu saja, ada tiga hal yang ingin saya lihat dalam alat seperti ini:

  • Ringkasan grafis tentang pekerjaan yang dijalankan saat, untuk berapa lama, dan apakah mereka berhasil.
  • Tampilan status saat ini, seperti Monitor Aktivitas Pekerjaan, tetapi diperbarui dalam waktu nyata.
  • Antarmuka yang lebih nyaman untuk menduplikasi atau memodifikasi pekerjaan (misalnya, membandingkan dua langkah pekerjaan tanpa diblokir oleh dialog modal).

Mungkin akan mudah untuk menulis aplikasi kecil untuk menangani ini, tetapi seseorang pasti sudah melakukannya, dan melakukannya dengan lebih baik.

Ini jelas pertanyaan subyektif, jadi jika beberapa jenis pengembara lewat, jangan sungkan untuk menjadikannya CW.

Jawaban:


13

Apakah beberapa googling di sekitar dan di sini adalah beberapa perangkat lunak yang mungkin menarik bagi Anda:

  1. SQL Job Manager https://www.idera.com/productssolutions/freetools/sqljobmanager

  2. Permintaan Saat Ini Menjalankan Pekerjaan Agen SQL Server http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/

Jika ada yang memiliki lebih banyak tautan untuk ditambahkan, silakan!


Untuk poin 3, permintaan tautan dan catatan ada di sini -

Hari ini saya melakukan pencarian untuk menemukan cara untuk mendaftar semua pekerjaan SQL Server Agent yang sedang berjalan. Seperti setiap pencarian lainnya, yang ini juga dimulai dengan Google-ing. :)

Dalam 2 menit saya menemukan posting hebat ini oleh Brent Ozar di SQLServerPedia. Mengapa postingan ini begitu hebat? Ini sangat bagus karena Brent berpikir bahwa jika Anda hanya menanyakan tabel sysjobs dan sysjobhistory, Anda tidak akan mendapatkan status pekerjaan saat ini yang akurat. Yaitu dalam tabel sysjobhistory Anda memiliki kolom run_status, namun (meskipun menurut BOL nilai yang mungkin untuk kolom ini adalah "Status pelaksanaan pekerjaan: 0 = Gagal, 1 = Berhasil, 2 = Coba lagi, 3 = Coba lagi, 3 = Dibatalkan, 4 = Sedang berlangsung ”) pada kenyataannya, nilainya tidak akan pernah menjadi 4 (Sedang Berlangsung). Sebenarnya, dalam tabel sysjobhistory disimpan data historis dari setiap langkah pekerjaan yang dieksekusi, yang berarti bahwa status langkah tersebut diperbarui hanya setelah langkah berikutnya dieksekusi. Dengan kata lain, tabel TIDAK diperbarui secara real time, atau setiap detik lainnya.

Jadi, Brent menemukan bahwa ada prosedur tersimpan yang tidak terdokumentasi sys.xp_sqlagent_enum_jobs, yang merupakan bagian dari sp_help_job, yang dapat memberikan status eksekusi saat ini dari Agent Job.

Meskipun saya menemukan cara untuk mendapatkan pekerjaan yang sedang berjalan, saya tidak senang dengan skrip ini karena hanya berjalan pada SQL 2005/2008.

Apa yang harus saya lakukan jika saya memiliki contoh SQL 2000 dan saya sangat ingin tahu tentang pekerjaan yang sedang berjalan?

Dengan sedikit bantuan Tim Chapman (master www.SQLServerNation.com), saya menemukan cara untuk melakukannya. TERIMA KASIH, Tim!

Berikut ini adalah skrip final, yang akan berjalan pada SQL 2000, 2005 dan 2008, dan yang akan memberi Anda pekerjaan agen SQL Server yang sedang berjalan. (Seperti yang Anda lihat, perbedaan dengan skrip Brent sangat sedikit: alih-alih “sys.xp_sqlagent_enum_jobs” Saya menggunakan “master.dbo.xp_sqlagent_enum_jobs” dan saya membatasi resultset untuk mendapatkan hanya pekerjaan yang sedang berjalan dengan menggunakan “where x .running = 1 ″).

Sederhana seperti itu. Nikmati.

IF EXISTS (SELECT *
FROM    tempdb.dbo.sysobjects
WHERE   id = OBJECT_ID(N'[tempdb].[dbo].[Temp1]')
)
DROP TABLE [tempdb].[dbo].[Temp1]
GO
CREATE TABLE [tempdb].[dbo].[Temp1]
(
job_id uniqueidentifier NOT NULL,
last_run_date nvarchar (20) NOT NULL,
last_run_time nvarchar (20) NOT NULL,
next_run_date nvarchar (20) NOT NULL,
next_run_time nvarchar (20) NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL,
request_source INT NOT NULL,
request_source_id sysname
COLLATE database_default NULL,
running INT NOT NULL,
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL)
DECLARE @job_owner   sysname
DECLARE @is_sysadmin   INT
SET @is_sysadmin   = isnull (is_srvrolemember ('sysadmin'), 0)
SET @job_owner   = suser_sname ()
INSERT INTO [tempdb].[dbo].[Temp1]

--EXECUTE sys.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
UPDATE [tempdb].[dbo].[Temp1]
SET last_run_time    = right ('000000' + last_run_time, 6),
next_run_time    = right ('000000' + next_run_time, 6);
-----
SELECT j.name AS JobName,
j.enabled AS Enabled,
CASE x.running
WHEN 1
THEN
'Running'
ELSE
CASE h.run_status
WHEN 2 THEN 'Inactive'
WHEN 4 THEN 'Inactive'
ELSE 'Completed'
END
END
AS CurrentStatus,
coalesce (x.current_step, 0) AS CurrentStepNbr,
CASE
WHEN x.last_run_date > 0
THEN
convert (datetime,
substring (x.last_run_date, 1, 4)
+ '-'
+ substring (x.last_run_date, 5, 2)
+ '-'
+ substring (x.last_run_date, 7, 2)
+ ' '
+ substring (x.last_run_time, 1, 2)
+ ':'
+ substring (x.last_run_time, 3, 2)
+ ':'
+ substring (x.last_run_time, 5, 2)
+ '.000',
121
)
ELSE
NULL
END
AS LastRunTime,
CASE h.run_status
WHEN 0 THEN 'Fail'
WHEN 1 THEN 'Success'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Cancel'
WHEN 4 THEN 'In progress'
END
AS LastRunOutcome,
CASE
WHEN h.run_duration > 0
THEN
(h.run_duration / 1000000) * (3600 * 24)
+ (h.run_duration / 10000 % 100) * 3600
+ (h.run_duration / 100 % 100) * 60
+ (h.run_duration % 100)
ELSE
NULL
END
AS LastRunDuration
FROM          [tempdb].[dbo].[Temp1] x
LEFT JOIN
msdb.dbo.sysjobs j
ON x.job_id = j.job_id
LEFT OUTER JOIN
msdb.dbo.syscategories c
ON j.category_id = c.category_id
LEFT OUTER JOIN
msdb.dbo.sysjobhistory h
ON     x.job_id = h.job_id
AND x.last_run_date = h.run_date
AND x.last_run_time = h.run_time
AND h.step_id = 0
where x.running = 1

Saya mencoba SQLjobvis; itu membuat saya agak memvisualisasikan jadwal, tetapi itu tidak benar-benar lebih baik daripada apa yang bisa saya lakukan untuk diri sendiri dalam satu jam. Saya telah menempatkan sumbu waktu secara vertikal, sehingga pengguna dapat dengan mudah menggulir hari.
Jon dari Semua Perdagangan

3

Saya tahu ini adalah posting yang lebih lama, dan saya secara pribadi memiliki masalah yang sama. Mengelola beberapa pekerjaan agen SQL di beberapa kejadian, jadi saya memutuskan untuk membuat SQL Agent Insight , ditemukan di sini> http://brentec.ca . Ini adalah produk yang berkembang dan akan keluar dari beta dalam waktu dekat dan terus diperbarui dan saran dipersilahkan. Ini adalah proyek yang saya kerjakan selama waktu luang saya ketika saya berkonsultasi dan juga memiliki pertunjukan penuh waktu, tetapi jika saran-saran itu bernilai sementara, mereka dimasukkan ke dalam hopper untuk masa depan.

Saat ini hanya alat pemantauan untuk agen SQL, dengan beberapa kemampuan scripting. Saat ini duduk di versi 0.11 dengan 2-3 pembaruan per tahun dan memiliki informasi kontak untuk bantuan. Ya, saat ini, tidak ada bantuan online, tetapi karena ini adalah produk read-only, tidak ada kerusakan yang dapat dilakukan pada contoh SQL yang dimonitor.


2

Apakah Anda mencoba fitur laporan?

Klik kanan pada SQL Agent => Laporan => laporan standar


Saya belum melakukannya, tetapi mereka tidak terlalu membantu. Ada dua, dan mereka hanya menunjukkan jumlah eksekusi dan waktu lari rata-rata.
Jon of All Trades

Untuk lebih jelasnya, saya tidak mengesampingkan laporan SQL Studio, jika seseorang memiliki laporan bermanfaat yang ingin mereka bagikan.
Jon dari Semua Perdagangan


2

Satu lagi untuk ditambahkan ke daftar:

Satu hal yang saya sukai dari yang ini adalah terintegrasi dengan komponen lain seperti Windows Scheduler dan tugas Oracle.

Terima kasih kepada Mark karena telah mengemukakan ini ketika saya bertanya di The Heap.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.