V tomto článku uvádím čtyři možnosti vrácení dat historie úloh SQL Server Agent.
Možnosti
Zahrnul jsem dvě možnosti GUI a dvě možnosti T-SQL:
- Možnost 1 :Použijte GUI SSMS.
- Možnost 2 :Použijte rozhraní Azure Data Studio GUI (prostřednictvím rozšíření SQL Server Agent)
- Možnost 3 :Spusťte
sp_help_jobhistory
uložená procedura. - Možnost 4 :Dotaz na
sysjobhistory
tabulky (a připojte ji pomocísysjobs_view
nebosysjobs
stůl).
Objekty SQL Server Agent jsou umístěny v msdb databáze, a tak je třeba v této databázi spouštět možnosti T-SQL. Můžete to udělat přepnutím na msdb nejprve databáze, nebo příslušnou kvalifikací objektu (např. msdb.dbo.sysjobhistory
).
Možnost 1:Použijte GUI SSMS
K zobrazení historie úloh můžete použít GUI SQL Server Management Studio (SSMS).
Můžete to provést rozbalením uzlu SQL Server Agent v Průzkumníku objektů a kliknutím pravým tlačítkem na Úlohy a výběrem Zobrazit historii z kontextové nabídky:
Otevře se nové okno s historií všech úloh v prohlížeči souborů protokolu:
Historii jedné úlohy můžete zobrazit zrušením výběru ostatních úloh na této obrazovce. Případně můžete tuto úlohu vyhledat v Průzkumníku objektů a tam na ni kliknout pravým tlačítkem.
Další podrobnosti a snímky obrazovky najdete v části Zobrazení historie úloh SQL Server Agent pomocí SSMS.
Možnost 2:Použijte grafické uživatelské rozhraní Azure Data Studio
Pokud používáte Azure Data Studio, možná to nevíte, ale máte také možnost zobrazit historii úloh SQL Server Agent.
Způsob, jak toho dosáhnout, je prostřednictvím rozšíření SQL Server Agent.
Tady je to, jak to vypadá:
Na této obrazovce se díváme na historii úlohy s názvem BackupKrankyKranesDB .
Historie úloh je uvedena v levém panelu. Kliknutím na každou položku v levém podokně historie zobrazíte podrobnosti o této položce v pravém podokně.
V době psaní tohoto článku se zdá, že můžete zobrazit pouze historii jedné úlohy najednou.
Další podrobnosti a snímky obrazovky najdete v tématu Zobrazení historie úloh SQL Server Agent pomocí Azure Data Studio.
Možnost 3:sp_help_jobhistory
Uložená procedura
Pokud dáváte přednost (nebo potřebujete) dělat své úkoly pomocí T-SQL, pak sp_help_jobhistory
uložená procedura je pro vás rychlou a snadnou možností.
Když zavoláte sp_help_jobhistory
bez jakýchkoli argumentů vrací historii pro všechny úlohy. Ale když předáte název nebo ID úlohy, zobrazí se pouze historie této jedné úlohy.
Zde je příklad:
EXEC msdb.dbo.sp_help_jobhistory;
Výsledek:
Všimněte si, že sp_help_jobhistory
je umístěn v msdb databázi, takže se musíte ujistit, že ji spouštíte odtud. Můžete to provést buď přepnutím do této databáze (např. pomocí USE msdb
), nebo kvalifikací uložené procedury s databází a schématem (tj. msdn.dbo.sp_help_jobhistory
).
Historii jedné úlohy můžete získat předáním ID nebo názvu této úlohy jako argumentu.
Příklad:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB';
Můžete také použít @mode parameter
určit, zda se mají vrátit všechny sloupce v sadě výsledků (FULL
), nebo jen souhrn (SUMMARY
).
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB',
@mode = 'FULL';
Výchozí hodnota je SUMMARY
.
Možnost 4:sysjobhistory
Tabulka
sysjobhistory
tabulka je tabulka, která ukládá data historie úlohy.
Jako u každé tabulky můžete jednoduše udělat něco takového:
SELECT * FROM msdb.dbo.sysjobhistory;
Tím se vrátí všechny sloupce v tabulce.
Tato tabulka však neukládá název úlohy (ani popis úlohy atd.). Chcete-li tato data získat, musíte tuto tabulku propojit s jinými tabulkami/zobrazeními, jako je sysjobs_view
nebo sysjobs
stůl. To poskytne úplnější sadu výsledků.
Níže je uveden dotaz, který můžete použít k vrácení úplnějších dat.
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;
Výsledek:
Do SELECT
můžete přidat další sloupce seznam podle potřeby.
Pokud vás zajímá, proč tento dotaz používá spoustu dalších věcí, jako je AGENT_DATETIME()
funkce STUFF()
funkce, RIGHT()
, CAST()
a REPLICATE()
, je to kvůli způsobu sysjobhistory
ukládá své hodnoty data a času.
Kdybych tyto funkce nepoužil, hodnoty data a času by byly méně čitelné.
Konkrétně run_date
, run_time
a run_duration
sloupce ukládají svá data jako int hodnoty. Ve výchozím nastavení vypadají data v těchto sloupcích takto:
To může některým z nás lidí ztížit čtení. Zejména run_duration
sloupec. Použili jsme proto různé funkce ve výše uvedeném dotazu, abychom tyto sloupce prezentovali ve lépe čitelném formátu.
Můžete si všimnout, že sp_help_jobhistory
uložená procedura trpí stejným problémem.
Také bych měl zmínit, že AGENT_DATE()
se zdá být nezdokumentovanou funkcí.