Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

4 Möglichkeiten zum Abrufen des SQL Server-Auftragsverlaufs

In diesem Artikel stelle ich vier Optionen zum Zurückgeben von Auftragsverlaufsdaten des SQL Server-Agenten vor.

Die Optionen

Ich habe zwei GUI-Optionen und zwei T-SQL-Optionen eingefügt:

  • Möglichkeit 1 :Verwenden Sie die SSMS-GUI.
  • Möglichkeit 2 :Verwenden Sie die Azure Data Studio-GUI (über die SQL Server-Agent-Erweiterung)
  • Möglichkeit 3 :Führen Sie sp_help_jobhistory aus gespeicherte Prozedur.
  • Option 4 :Fragen Sie die sysjobhistory ab Tabelle (und verbinden Sie sie mit der sysjobs_view view oder die sysjobs Tisch).

Die SQL Server Agent-Objekte befinden sich in der msdb Datenbank, und daher müssen die T-SQL-Optionen in dieser Datenbank ausgeführt werden. Sie können dies tun, indem Sie zur msdb wechseln Datenbank zuerst oder indem Sie das Objekt entsprechend qualifizieren (z. B. msdb.dbo.sysjobhistory ).

Option 1:Verwenden Sie die SSMS-GUI

Sie können die grafische Benutzeroberfläche von SQL Server Management Studio (SSMS) verwenden, um den Auftragsverlauf anzuzeigen.

Sie können dies tun, indem Sie den SQL Server Agent-Knoten im Objekt-Explorer erweitern und dann mit der rechten Maustaste auf Jobs klicken und Verlauf anzeigen auswählen aus dem Kontextmenü:

Dies öffnet ein neues Fenster mit dem Jobverlauf aller Jobs im Log File Viewer:

Sie können den Verlauf eines einzelnen Jobs anzeigen, indem Sie die Auswahl der anderen Jobs in diesem Bildschirm aufheben. Alternativ können Sie diesen Job im Objekt-Explorer suchen und von dort aus mit der rechten Maustaste darauf klicken.

Weitere Einzelheiten und Screenshots finden Sie unter Anzeigen des Auftragsverlaufs des SQL Server-Agents mit SSMS.

Option 2:Verwenden Sie die Azure Data Studio-GUI

Wenn Sie Azure Data Studio verwenden, wissen Sie es vielleicht nicht, aber Sie haben auch die Möglichkeit, den Auftragsverlauf des SQL Server-Agents anzuzeigen.

Dies geschieht über die SQL Server Agent-Erweiterung.

So sieht das aus:

In diesem Bildschirm sehen wir uns den Verlauf für einen Job namens BackupKrankyKranesDB an .

Der Auftragsverlauf wird im linken Bereich aufgelistet. Sie können auf jedes Element im linken Verlaufsfenster klicken, um die Details dieses Elements im rechten Fenster anzuzeigen.

Während ich dies schreibe, scheint es, dass Sie jeweils nur den Verlauf eines einzelnen Jobs anzeigen können.

Weitere Einzelheiten und Screenshots finden Sie unter Anzeigen des Auftragsverlaufs des SQL Server-Agents mit Azure Data Studio.

Option 3:Die sp_help_jobhistory Gespeicherte Prozedur

Wenn Sie es vorziehen (oder müssen), Ihre Aufgaben mit T-SQL zu erledigen, dann ist die sp_help_jobhistory Stored Procedure ist eine schnelle und einfache Option für Sie.

Wenn Sie sp_help_jobhistory aufrufen ohne Argumente gibt es den Verlauf für alle Jobs zurück. Aber wenn Sie den Namen oder die ID eines Jobs übergeben, wird nur der Verlauf für diesen einen Job aufgelistet.

Hier ist ein Beispiel:

EXEC msdb.dbo.sp_help_jobhistory;

Ergebnis:

Beachten Sie, dass sp_help_jobhistory befindet sich in der msdb Datenbank, also müssen Sie sicherstellen, dass Sie es von dort aus ausführen. Sie können dies entweder tun, indem Sie zu dieser Datenbank wechseln (z. B. mit USE msdb ) oder durch Qualifizieren der gespeicherten Prozedur mit der Datenbank und dem Schema (d. h. msdn.dbo.sp_help_jobhistory ).

Sie können den Verlauf eines einzelnen Jobs abrufen, indem Sie die ID oder den Namen dieses Jobs als Argument übergeben.

Beispiel:

EXEC msdb.dbo.sp_help_jobhistory
	@job_name = 'BackupKrankyKranesDB';

Sie können auch den @mode parameter verwenden um anzugeben, ob alle Spalten in der Ergebnismenge zurückgegeben werden sollen oder nicht (FULL ) oder nur eine Zusammenfassung (SUMMARY ).

EXEC msdb.dbo.sp_help_jobhistory
	@job_name = 'BackupKrankyKranesDB',
	@mode = 'FULL';

Der Standardwert ist SUMMARY .

Option 4:Die sysjobhistory Tabelle

Die sysjobhistory table ist die Tabelle, in der Auftragsverlaufsdaten gespeichert werden.

Wie bei jeder Tabelle können Sie einfach so etwas tun:

SELECT * FROM msdb.dbo.sysjobhistory;

Dadurch werden alle Spalten in der Tabelle zurückgegeben.

Diese Tabelle speichert jedoch nicht den Jobnamen (oder die Jobbeschreibung usw.). Um diese Daten zu erhalten, müssen Sie diese Tabelle mit anderen Tabellen/Ansichten verbinden, wie z. B. sysjobs_view view oder die sysjobs Tisch. Dadurch erhalten Sie eine vollständigere Ergebnismenge.

Nachfolgend finden Sie eine Abfrage, mit der Sie vollständigere Daten zurückgeben können.

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;

Ergebnis:

Sie können dem SELECT weitere Spalten hinzufügen nach Bedarf auflisten.

Wenn Sie sich fragen, warum diese Abfrage eine ganze Reihe zusätzlicher Dinge verwendet, wie z. B. AGENT_DATETIME() Funktion, die STUFF() Funktion, RIGHT() , CAST() , und REPLICATE() , es liegt an der Art und Weise sysjobhistory speichert seine datetime-Werte.

Wenn ich diese Funktionen nicht verwendet hätte, wären die datetime-Werte weniger lesbar gewesen.

Insbesondere das run_date , run_time und run_duration Spalten speichern ihre Daten als int Werte. Standardmäßig sehen die Daten in diesen Spalten so aus:

Das kann einigen von uns Menschen das Lesen erschweren. Besonders die run_duration Säule. Daher haben wir die verschiedenen Funktionen in der obigen Abfrage verwendet, um diese Spalten in einem besser lesbaren Format darzustellen.

Sie werden vielleicht bemerken, dass die Datei sp_help_jobhistory gespeicherte Prozedur leidet unter dem gleichen Problem.

Außerdem sollte ich das AGENT_DATE() erwähnen Scheint eine undokumentierte Funktion zu sein.