Was ist ein gutes Tool zur Visualisierung von SQL Agent-Jobs? [geschlossen]


14

Ich finde die integrierten MS SQL Studio-Tools zum Verwalten von Agent-Jobs etwas frustrierend. Welche Tools haben Sie als hilfreich empfunden?

Auf den ersten Blick gibt es drei Dinge, die ich in einem solchen Tool sehen möchte:

  • Eine grafische Zusammenfassung, welche Jobs wann, wie lange ausgeführt wurden und ob sie erfolgreich waren.
  • Eine aktuelle Statusansicht wie der Job Activity Monitor, die jedoch nahezu in Echtzeit aktualisiert wird.
  • Eine bequemere Oberfläche zum Duplizieren oder Ändern von Jobs (z. B. Vergleichen von zwei Jobschritten, ohne durch modale Dialogfelder blockiert zu werden).

Es wäre wahrscheinlich einfach, eine kleine App zu schreiben, um damit umzugehen, aber jemand hat es sicherlich schon getan und es besser gemacht.

Dies ist offensichtlich eine subjektive Frage. Wenn also eine Art Mod vorbeikommt, können Sie sie zu einer CW machen.

Antworten:


13

Haben Sie ein bisschen gegoogelt und hier ist eine Software, die Sie interessieren könnte:

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

  2. Abfrage, die zurzeit SQL Server-Agent-Jobs ausführt http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/

Wenn jemand mehr Links zum Hinzufügen hat, mach weiter!


Für Punkt 3 sind die Link-Abfrage und Notizen hier -

Heute habe ich nach einer Möglichkeit gesucht, alle derzeit ausgeführten SQL Server-Agent-Jobs aufzulisten. Wie jede andere Suche begann auch diese mit Google-ing. :)

Innerhalb von 2 Minuten fand ich diesen tollen Beitrag von Brent Ozar auf SQLServerPedia. Warum ist dieser Beitrag so toll? Es ist so großartig, weil Brent dachte, wenn Sie nur die sysjobs- und die sysjobhistory-Tabellen abfragen, erhalten Sie keinen genauen aktuellen Jobstatus. Dh in der Tabelle sysjobhistory haben Sie eine Spalte run_status (obwohl laut BOL die möglichen Werte für diese Spalte "Status der Jobausführung" lauten: 0 = Fehlgeschlagen, 1 = Erfolgreich, 2 = Wiederholen, 3 = Abgebrochen, 4 = In Bearbeitung ”) in Wirklichkeit wird der Wert niemals 4 (In Bearbeitung) sein. Tatsächlich werden in der Sysjobhistory-Tabelle Verlaufsdaten jedes ausgeführten Auftragsschritts gespeichert, was bedeutet, dass der Status des Schritts erst aktualisiert wird, nachdem der nächste Schritt ausgeführt wurde. Mit anderen Worten, die Tabelle wird weder in Echtzeit noch jede zweite Sekunde aktualisiert.

Also fand Brent heraus, dass es eine undokumentierte gespeicherte Prozedur sys.xp_sqlagent_enum_jobs gibt, die Teil von sp_help_job ist und den aktuellen Ausführungsstatus des Agent-Jobs liefern kann.

Obwohl ich eine Möglichkeit gefunden habe, die aktuell ausgeführten Jobs abzurufen, war ich mit diesem Skript nicht zufrieden, da es nur unter SQL 2005/2008 ausgeführt wird.

Was kann ich tun, wenn ich eine SQL 2000-Instanz besitze und neugierig auf die aktuell ausgeführten Jobs bin?

Mit ein bisschen Hilfe von Tim Chapman (dem Meister von www.SQLServerNation.com) habe ich herausgefunden, wie es geht. DANKE, Tim!

Hier ist das letzte Skript, das unter SQL 2000, 2005 und 2008 ausgeführt wird und das Ihnen die aktuell ausgeführten SQL Server-Agentenaufträge liefert. (Wie Sie sehen, ist der Unterschied zu Brents Skript sehr gering: Anstelle von "sys.xp_sqlagent_enum_jobs" verwende ich "master.dbo.xp_sqlagent_enum_jobs" und beschränke die Ergebnismenge, um nur die aktuell ausgeführten Jobs zu erhalten, indem "where x" verwendet wird .running = 1 ").

Einfach wie es ist. Genießen.

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

Ich habe SQLjobvis ausprobiert. Dadurch kann ich mir den Zeitplan etwas vorstellen, aber es ist nicht wirklich besser als das, was ich in einer Stunde für mich tun könnte. Ich hätte die Zeitachse vertikal gestellt, damit Benutzer problemlos durch die Tage scrollen können.
Jon of All Trades

3

Ich weiß, dass dies ein älterer Beitrag ist und ich persönlich das gleiche Problem hatte. Verwalten mehrerer SQL Agent-Jobs über mehrere Instanzen hinweg. Daher habe ich mich für die Erstellung von SQL Agent Insight entschieden. Diese finden Sie hier> http://brentec.ca . Es handelt sich um ein sich entwickelndes Produkt, das in naher Zukunft aus der Betaphase aussteigen wird. Es wird ständig aktualisiert und Vorschläge sind willkommen. Dies ist ein Projekt, an dem ich in meiner Freizeit arbeite, während ich berate und einen Vollzeit-Auftritt habe, aber wenn sich die Vorschläge lohnen, werden sie in den Trichter für die Zukunft gestellt.

Derzeit handelt es sich nur um ein Überwachungstool für SQL-Agenten mit einigen Skriptfähigkeiten. Befindet sich derzeit in Version 0.11 mit 2-3 Updates pro Jahr und hat Kontaktinformationen für Unterstützung. Ja, im Moment gibt es keine Online-Hilfe. Da es sich jedoch um ein schreibgeschütztes Produkt handelt, kann die überwachte SQL-Instanz nicht beschädigt werden.


2

Haben Sie die Berichtsfunktion ausprobiert?

Klicken Sie mit der rechten Maustaste auf SQL Agent => Berichte => Standardberichte


Ich hatte nicht, aber sie sind nicht sehr hilfreich. Es gibt zwei und sie zeigen nur die Anzahl der Ausführungen und die durchschnittliche Laufzeit an.
Jon of All Trades

Um es klar zu sagen, ich schließe SQL Studio-Berichte nicht aus, wenn jemand einen nützlichen Bericht hat, den er teilen möchte.
Jon of All Trades


2

Ein weiterer zur Liste hinzuzufügen:

Eine Sache, die mir an dieser gefällt, ist die Integration in andere Komponenten wie Windows Scheduler und Oracle-Tasks.

Vielen Dank an Mark , der das angesprochen hat, als ich auf The Heap gefragt habe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.