В тази статия представям четири опции за връщане на данни от историята на заданията на SQL Server Agent.
Опциите
Включих две опции за GUI и две опции за T-SQL:
- Опция 1 :Използвайте SSMS GUI.
- Вариант 2 :Използвайте графичния интерфейс на Azure Data Studio (чрез разширението на SQL Server Agent)
- Опция 3 :Изпълнете
sp_help_jobhistory
съхранена процедура. - Опция 4 :Запитване в
sysjobhistory
таблица (и я присъединете сsysjobs_view
изглед илиsysjobs
таблица).
Обектите на SQL Server Agent се намират в msdb база данни и така опциите на T-SQL трябва да се изпълняват в тази база данни. Можете да направите това, като преминете към msdb база данни първо или чрез подходящо квалифициране на обекта (напр. msdb.dbo.sysjobhistory
).
Опция 1:Използвайте SSMS GUI
Можете да използвате GUI на SQL Server Management Studio (SSMS), за да видите хронологията на заданията.
Можете да направите това, като разширите възела на SQL Server Agent в Object Explorer, след което щракнете с десния бутон върху Jobs и изберете Преглед на историята от контекстното меню:
Това отваря нов прозорец с хронологията на всички задачи в инструмента за преглед на регистрационни файлове:
Можете да прегледате хронологията на едно задание, като премахнете избора от другите задания в този екран. Като алтернатива можете да намерите това задание в Object Explorer и да щракнете с десния бутон върху него от там.
Вижте Преглед на историята на заданията на агент на SQL Server с SSMS за повече подробности и екранни снимки.
Опция 2:Използвайте графичния интерфейс на Azure Data Studio
Ако използвате Azure Data Studio, може да не го знаете, но също така имате опцията да прегледате историята на заданията на агент на SQL Server.
Начинът да направите това е чрез разширението на SQL Server Agent.
Ето как изглежда това:
На този екран разглеждаме историята на работа, наречена BackupKrankyKranesDB .
Историята на заданията е посочена в левия прозорец. Можете да щракнете върху всеки елемент в левия панел на историята, за да покажете подробностите за този елемент в десния прозорец.
Към момента на писане изглежда, че можете да преглеждате историята само на една работа в даден момент.
Вижте Преглед на историята на заданията на агент на SQL Server с Azure Data Studio за повече подробности и екранни снимки.
Опция 3:sp_help_jobhistory
Съхранена процедура
Ако предпочитате (или трябва) да изпълнявате задачите си с T-SQL, тогава sp_help_jobhistory
съхранената процедура е бърза и лесна опция за вас.
Когато извикате sp_help_jobhistory
без никакви аргументи, той връща историята за всички работни места. Но когато подадете името или идентификатора на задание, той изброява само хронологията за това едно задание.
Ето един пример:
EXEC msdb.dbo.sp_help_jobhistory;
Резултат:
Обърнете внимание, че sp_help_jobhistory
се намира в msdb база данни, така че трябва да сте сигурни, че я стартирате от там. Можете да направите това или като преминете към тази база данни (например с USE msdb
), или чрез квалифициране на съхранената процедура с базата данни и схемата (т.е. msdn.dbo.sp_help_jobhistory
).
Можете да получите историята на едно задание, като предадете идентификатора или името на това задание като аргумент.
Пример:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB';
Можете също да използвате @mode parameter
за да укажете дали да се върнат всички колони в набора от резултати (FULL
), или просто обобщение (SUMMARY
).
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB',
@mode = 'FULL';
По подразбиране е SUMMARY
.
Опция 4:sysjobhistory
Таблица
sysjobhistory
table е таблицата, която съхранява данни от историята на заданията.
Както при всяка таблица, можете просто да направите нещо подобно:
SELECT * FROM msdb.dbo.sysjobhistory;
Това ще върне всички колони в таблицата.
Тази таблица обаче не съхранява името на заданието (или описанието на заданието и т.н.). За да получите тези данни, ще трябва да присъедините тази таблица с други таблици/изгледи, като например sysjobs_view
изглед или sysjobs
маса. Това ще осигури по-пълен набор от резултати.
По-долу е дадена заявка, която можете да използвате, за да върнете по-пълни данни.
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;
Резултат:
Можете да добавите още колони към SELECT
списък според изискванията.
Ако се чудите защо тази заявка използва цял куп допълнителни неща, като AGENT_DATETIME()
функция, STUFF()
функция, RIGHT()
, CAST()
и REPLICATE()
, това е заради начина на sysjobhistory
съхранява своите стойности за дата и час.
Ако не бях използвал тези функции, стойностите за дата и час щяха да бъдат по-малко четими.
По-специално run_date
, run_time
и run_duration
колони съхраняват своите данни като int стойности. По подразбиране данните в тези колони изглеждат така:
Това може да затрудни четенето на някои от нас, хората. Особено run_duration
колона. Затова използвахме различните функции в горната заявка, за да представим тези колони в по-четлив от човека формат.
Може да забележите, че sp_help_jobhistory
Съхранената процедура страда от същия проблем.
Също така трябва да спомена, че AGENT_DATE()
изглежда е недокументирана функция.