W tym artykule przedstawiam cztery opcje zwracania danych historii zadań SQL Server Agent.
Opcje
Dołączyłem dwie opcje GUI i dwie opcje T-SQL:
- Opcja 1 :Użyj GUI SSMS.
- Opcja 2 :Użyj interfejsu graficznego Azure Data Studio (za pośrednictwem rozszerzenia SQL Server Agent)
- Opcja 3 :Wykonaj
sp_help_jobhistory
procedura składowana. - Opcja 4 :Zapytaj
sysjobhistory
tabeli (i dołącz do niej za pomocąsysjobs_view
widok lubsysjobs
stół).
Obiekty SQL Server Agent znajdują się w msdb bazy danych, a więc opcje T-SQL muszą być uruchamiane w tej bazie danych. Możesz to zrobić, przechodząc do msdb bazy danych lub przez odpowiednią kwalifikację obiektu (np. msdb.dbo.sysjobhistory
).
Opcja 1:Użyj GUI SSMS
Możesz użyć graficznego interfejsu użytkownika SQL Server Management Studio (SSMS), aby wyświetlić historię zadań.
Możesz to zrobić, rozwijając węzeł SQL Server Agent w Eksploratorze obiektów, a następnie klikając prawym przyciskiem myszy Praca i wybierając Wyświetl historię z menu kontekstowego:
Spowoduje to otwarcie nowego okna z historią wszystkich zadań w przeglądarce plików dziennika:
Historię pojedynczego zadania można wyświetlić, usuwając zaznaczenie innych zadań na tym ekranie. Alternatywnie możesz zlokalizować to zadanie w Eksploratorze obiektów i kliknąć je prawym przyciskiem myszy.
Zobacz Wyświetlanie historii zadań agenta programu SQL Server za pomocą programu SSMS, aby uzyskać więcej informacji i zrzuty ekranu.
Opcja 2:Użyj interfejsu graficznego Azure Data Studio
Jeśli używasz Azure Data Studio, możesz o tym nie wiedzieć, ale masz również możliwość przeglądania historii zadań agenta programu SQL Server.
Sposobem na to jest użycie rozszerzenia SQL Server Agent.
Oto jak to wygląda:
Na tym ekranie patrzymy na historię zadania o nazwie BackupKrankyKranesDB .
Historia pracy jest wymieniona w lewym okienku. Możesz kliknąć każdy element w lewym okienku historii, aby wyświetlić szczegóły tego elementu w prawym okienku.
W chwili pisania tego tekstu wydaje się, że możesz przeglądać historię tylko jednej pracy na raz.
Zobacz Wyświetlanie historii zadań agenta SQL Server w Azure Data Studio, aby uzyskać więcej informacji i zrzuty ekranu.
Opcja 3:sp_help_jobhistory
Zapisana procedura
Jeśli wolisz (lub potrzebujesz) wykonywać swoje zadania w T-SQL, wtedy sp_help_jobhistory
procedura składowana jest dla Ciebie szybką i łatwą opcją.
Gdy zadzwonisz do sp_help_jobhistory
bez żadnych argumentów zwraca historię wszystkich zadań. Ale kiedy podasz nazwę lub identyfikator zadania, wyświetla się tylko historia tego jednego zadania.
Oto przykład:
EXEC msdb.dbo.sp_help_jobhistory;
Wynik:
Pamiętaj, że sp_help_jobhistory
znajduje się w msdb bazy danych, więc musisz upewnić się, że uruchamiasz ją stamtąd. Możesz to zrobić albo przechodząc do tej bazy danych (np. za pomocą USE msdb
) lub przez zakwalifikowanie procedury składowanej do bazy danych i schematu (np. msdn.dbo.sp_help_jobhistory
).
Możesz uzyskać historię pojedynczego zadania, przekazując identyfikator lub nazwę tego zadania jako argument.
Przykład:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB';
Możesz także użyć @mode parameter
aby określić, czy zwracać wszystkie kolumny w zestawie wyników (FULL
) lub po prostu podsumowanie (SUMMARY
).
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB',
@mode = 'FULL';
Wartość domyślna to SUMMARY
.
Opcja 4:sysjobhistory
Tabela
sysjobhistory
table to tabela przechowująca dane historii zadań.
Jak w przypadku każdego stołu, możesz po prostu zrobić coś takiego:
SELECT * FROM msdb.dbo.sysjobhistory;
To zwróci wszystkie kolumny w tabeli.
Jednak ta tabela nie przechowuje nazwy zadania (lub opisu zadania itp.). Aby uzyskać te dane, musisz połączyć tę tabelę z innymi tabelami/widokami, takimi jak sysjobs_view
widok lub sysjobs
stół. To zapewni pełniejszy zestaw wyników.
Poniżej znajduje się zapytanie, którego możesz użyć, aby zwrócić pełniejsze dane.
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;
Wynik:
Możesz dodać więcej kolumn do SELECT
lista zgodnie z wymaganiami.
Jeśli zastanawiasz się, dlaczego to zapytanie wykorzystuje całą masę dodatkowych elementów, takich jak AGENT_DATETIME()
funkcja STUFF()
funkcja, RIGHT()
, CAST()
i REPLICATE()
, to ze względu na sposób, w jaki sysjobhistory
przechowuje swoje wartości daty i godziny.
Gdybym nie korzystał z tych funkcji, wartości datetime byłyby mniej czytelne.
W szczególności run_date
, run_time
i run_duration
kolumny przechowują swoje dane jako int wartości. Domyślnie dane w tych kolumnach wyglądają tak:
To może utrudnić niektórym z nas, ludzi, czytanie. Zwłaszcza run_duration
kolumna. Dlatego użyliśmy różnych funkcji w powyższym zapytaniu, aby przedstawić te kolumny w formacie bardziej czytelnym dla człowieka.
Możesz zauważyć, że sp_help_jobhistory
procedura składowana ma ten sam problem.
Powinienem również wspomnieć, że AGENT_DATE()
wydaje się być funkcją nieudokumentowaną.