Czy trochę googlowania w okolicy i oto niektóre oprogramowanie, które może Cię zainteresować:
Menedżer zadań SQL
https://www.idera.com/productssolutions/freetools/sqljobmanager
Zapytanie Aktualnie uruchomione zadania agenta SQL Server
http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/
Jeśli ktoś ma więcej linków do dodania, śmiało!
W przypadku punktu 3 zapytanie dotyczące łącza i uwagi znajdują się tutaj -
Dzisiaj poszedłem na poszukiwanie sposobu, aby wyświetlić listę wszystkich aktualnie uruchomionych zadań agenta SQL Server. Jak co drugi quest, ten również zaczął się od Google. :)
W ciągu 2 minut znalazłem ten świetny post Brenta Ozara na SQLServerPedia. Dlaczego ten post jest taki świetny? Jest tak świetny, ponieważ Brent doszedł do wniosku, że jeśli zapytasz tylko tabele sysjobs i sysjobhistory, nie uzyskasz dokładnego aktualnego statusu pracy. Tj. W tabeli sysjobhistory masz jednak kolumnę run_status (chociaż zgodnie z BOL możliwe wartości dla tej kolumny to „Status wykonania zadania: 0 = nieudany, 1 = zakończony powodzeniem, 2 = ponów próbę, 3 = anulowano, 4 = W toku ”) w rzeczywistości wartość nigdy nie będzie wynosić 4 (W toku). W rzeczywistości w tabeli sysjobhistory przechowywane są dane historyczne każdego wykonanego kroku zadania, co oznacza, że status kroku jest aktualizowany dopiero po wykonaniu następnego kroku. Innymi słowy, tabela NIE jest aktualizowana w czasie rzeczywistym ani co drugą sekundę.
Brent zorientował się, że istnieje nieudokumentowana procedura przechowywana sys.xp_sqlagent_enum_jobs, która jest częścią sp_help_job, która może nadać bieżący status wykonania zadania agenta.
Mimo że znalazłem sposób na uzyskanie aktualnie uruchomionych zadań, nie byłem zadowolony z tego skryptu, ponieważ działa on tylko na SQL 2005/2008.
Co powinienem zrobić, jeśli mam instancję SQL 2000 i jestem bardzo ciekawy aktualnie uruchomionych zadań?
Przy odrobinie pomocy Tima Chapmana (mistrza www.SQLServerNation.com) wymyśliłem, jak to zrobić. DZIĘKUJĘ, Tim!
Oto ostatni skrypt, który będzie działał na SQL 2000, 2005 i 2008, i który dostarczy Ci aktualnie uruchomione zadania agenta SQL Server. (Jak widać, różnica w skrypcie Brenta jest bardzo niewielka: zamiast „sys.xp_sqlagent_enum_jobs” Używam „master.dbo.xp_sqlagent_enum_jobs” i ograniczam zestaw wyników, aby uzyskać tylko aktualnie uruchomione zadania, używając „where x . bieganie = 1 ″).
Proste jak to jest. Cieszyć się.
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
Wiem, że to starszy post i osobiście miałem ten sam problem. Zarządzanie wieloma zadaniami agenta SQL w wielu instancjach, dlatego zdecydowałem się utworzyć SQL Agent Insight , który można znaleźć tutaj> http://brentec.ca . Jest to produkt ewoluujący, który wkrótce wyjdzie z wersji beta i jest stale aktualizowany, a sugestie są mile widziane. Jest to projekt, nad którym pracuję w czasie wolnym, kiedy się konsultuję, a także mam pełny etat, ale jeśli sugestie są tego warte, zostaną umieszczone w leju na przyszłość.
Obecnie jest to tylko narzędzie do monitorowania agenta SQL, z pewnymi możliwościami skryptowymi. Obecnie siedzi w wersji 0.11 z 2-3 aktualizacjami rocznie i ma dane kontaktowe w celu uzyskania pomocy. Tak, w tej chwili nie ma pomocy online, ale ponieważ jest to produkt przeznaczony tylko do odczytu, monitorowanej instancji SQL nie można wyrządzić żadnych szkód.
źródło
Czy próbowałeś funkcji raportów?
Kliknij prawym przyciskiem myszy SQL Agent => Raporty => standardowe raporty
źródło
Nie jestem pewien, czy to spełnia wszystkie twoje kryteria, ale możesz spojrzeć na to:
http://www.sqlsoft.co.uk/sqljobvis.php
źródło
Kolejny do dodania do listy:
Jedną z rzeczy, które podoba mi się w tym, jest to, że integruje się z innymi komponentami, takimi jak Windows Scheduler i zadania Oracle.
Dziękuję Markowi za poruszenie tego tematu, kiedy zapytałem w The Heap.
źródło