Bazı googling yaptı ve burada ilginizi çekebilecek bazı yazılımlar var:
SQL İş Yöneticisi
https://www.idera.com/productssolutions/freetools/sqljobmanager
Şu anda SQL Server Agent İşlerini Çalışan Sorgu
http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/
Ekleyecek başka bağlantılar varsa, devam edin!
3. nokta için bağlantı sorgusu ve notlar burada -
Bugün, şu anda çalışan tüm SQL Server Agent işlerini listelemenin bir yolunu keşfetmeye çalıştım. Diğer tüm görevler gibi bu da Google-ing ile başladı. :)
2 dakika içinde SQLServerPedia'daki Brent Ozar'ın bu harika gönderisini buldum. Bu gönderi neden bu kadar harika? Bu çok harika çünkü Brent sadece sysjobs ve sysjobhistory tablolarını sorgularsanız doğru iş durumunu doğru şekilde elde edemeyeceğinizi düşündü. Yani sysjobhistory tablosunda run_status sütununuz var, ancak (BOL'a göre bu sütun için olası değerler “İş yürütme durumu: 0 = Başarısız, 1 = Başarılı, 2 = Yeniden Dene, 3 = İptal edildi, 4) = Devam ediyor ”), gerçekte değer asla 4 olmaz (Devam Ediyor). Aslında, sysjobhistory tablosunda yürütülen her iş adımının geçmiş verileri tutulur, yani adımın durumu yalnızca bir sonraki adım yürütüldükten sonra güncellenir. Başka bir deyişle, tablo gerçek zamanlı olarak veya her iki saniyede bir güncellenmez.
Böylece Brent, Aracı İşinin geçerli yürütme durumunu verebilecek sp_help_job'ın bir parçası olan sys.xp_sqlagent_enum_jobs belgesinin saklı bir prosedürü olduğunu anladı.
Şu anda çalışan işleri almanın bir yolunu bulmama rağmen, sadece SQL 2005 / 2008'de çalıştığı için bu komut dosyasından memnun değildim.
Bir SQL 2000 örneğim varsa ve şu anda çalışan işler hakkında çok meraklıysam ne yapmam gerekir?
Tim Chapman'ın yardımıyla (www.SQLServerNation.com'un ustası) nasıl yapılacağını anladım. TEŞEKKÜRLER Tim!
İşte SQL 2000, 2005 ve 2008'de çalışacak ve şu anda çalışan SQL Server aracısı işlerini verecek olan son komut dosyası. (Gördüğünüz gibi Brent'in senaryosundaki fark çok az: “sys.xp_sqlagent_enum_jobs” yerine “master.dbo.xp_sqlagent_enum_jobs” kullanıyorum ve “burada x .running = 1 ″).
Olduğu kadar basit. Zevk almak.
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