V tomto článku uvádím čtyři možnosti, jak pomocí T-SQL vrátit plány, které jsou připojeny k úloze SQL Server Agent.
Možnosti
Chcete-li vrátit plány úlohy SQL Server Agent, můžete použít následující možnosti T-SQL:
- Možnost 1 :Spusťte
sp_help_job
uložené procedury. - Možnost 2 :Spusťte
sp_help_schedule
uložená procedura. - Možnost 3 :Spusťte
sp_help_jobschedule
uložená procedura. - Možnost 4 :Dotaz na
sysschedules
tabulky (a připojte se k ní pomocísysjobschedules
asysjobs_view
).
Všechny tyto možnosti jsou umístěny v msdb databázi, a proto je třeba ji v této databázi spouštět. Můžete to udělat přepnutím na msdb nejprve databáze, nebo příslušnou kvalifikací objektu (např. msdb.dbo.sysschedules
).
Možnost 1:sp_help_job
Uložená procedura
Když zavoláte sp_help_job
bez jakýchkoli argumentů jednoduše vrátí seznam úloh. Ale když předáte název nebo ID úlohy, zobrazí se podrobnosti o této úloze, včetně jejích plánů.
Zde je příklad:
USE msdb;
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Výsledek:
Zde je uveden seznam úlohy a také všechny kroky úlohy, plány a cílové servery. V tomto případě jsou k úloze připojeny dva plány.
Zde je příklad kódu při použití ID:
EXEC sp_help_job
@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Při použití ID můžete název parametru vynechat, chcete-li.
Příklad:
EXEC sp_help_job '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Syntaxe
Úplná syntaxe sp_help_job
vypadá takto:
sp_help_job { [ @job_id = ] job_id
[ @job_name = ] 'job_name' }
[ , [ @job_aspect = ] 'job_aspect' ]
[ , [ @job_type = ] 'job_type' ]
[ , [ @owner_login_name = ] 'login_name' ]
[ , [ @subsystem = ] 'subsystem' ]
[ , [ @category_name = ] 'category' ]
[ , [ @enabled = ] enabled ]
[ , [ @execution_status = ] status ]
[ , [ @date_comparator = ] 'date_comparison' ]
[ , [ @date_created = ] date_created ]
[ , [ @date_last_modified = ] date_modified ]
[ , [ @description = ] 'description_pattern' ]
Viz dokumentaci společnosti Microsoft pro sp_help_job
pro vysvětlení každého parametru a také hodnot, které každý přijímá.
Možnost 2:sp_help_schedule
Uložená procedura
sp_help_schedule
uložená procedura je navržena speciálně pro návrat plánů.
Pokud jej spustíte bez předání jakýchkoli argumentů, vrátí všechny plány v instanci:
EXEC sp_help_schedule;
Chcete-li získat informace pro konkrétní rozvrh, předejte buď název rozvrhu, nebo jeho ID:
EXEC sp_help_schedule
@schedule_name = 'Run_Sat_6AM';
Ačkoli sp_help_schedule
nevrací plány pro konkrétní úlohu, můžete ji použít k vrácení pouze těch plánů, které jsou připojeny k úloze.
@attached_schedules_only
parametr je bit , s výchozí hodnotou 0
, což znamená, že vrací připojené i nepřipojené plány. Předání hodnoty 1
omezuje to pouze na připojené plány.
Příklad:
EXEC sp_help_schedule
@attached_schedules_only = 1;
Další věc, kterou můžete udělat, je použít @include_description
parametr určující, zda se má nebo nemá zahrnout popis plánu do sady výsledků.
Viz Používání sp_help_schedule
v SQL Server, kde najdete další informace a příklady.
Možnost 3:sp_help_jobschedule
Uložená procedura
sp_help_jobschedule
uložená procedura vrací informace o plánování úloh.
Příklad:
EXEC sp_help_jobschedule
@job_name = 'SqlAgentTest';
Tím se vrátí seznam plánů, které jsou připojeny k zadané úloze.
Můžete také předat ID nebo název plánu a vrátit pouze tento plán.
Když zavoláte sp_help_jobschedule
, musíte zadat buď název úlohy nebo její ID (ale ne obojí), nebo ID plánu. Můžete také předat schedule_name
ale pouze v kombinaci s ID úlohy nebo jejím názvem.
Přijatá kombinace argumentů je trochu ošemetná. Viz Používání sp_help_jobschedule
v SQL Server pro podrobnější vysvětlení a další příklady.
Možnost 4:sysschedules
tabulka (a další)
Můžete se dotazovat na sysschedules
tabulku a spojte ji s tabulkami, jako jsou sysjobschedules
a sysjobs_view
vrátit seznam úloh a jejich přidružené plány.
Příklad:
SELECT
jv.name,
jv.description,
s.schedule_id,
s.name,
s.freq_type,
s.freq_interval,
s.freq_subday_type,
s.freq_subday_interval,
js.next_run_date,
js.next_run_time
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobschedules js
ON jv.job_id = js.job_id
INNER JOIN msdb.dbo.sysschedules s
ON s.schedule_id = js.schedule_id
ORDER BY jv.name, s.name;
Výsledek:
V tomto případě jsem použil vnitřní spojení, abych vrátil pouze plány, které mají přidruženou úlohu a naopak.
Můžete přepnout na pravá spojení a vrátit všechny plány bez ohledu na to, zda jsou připojeny k úloze, nebo na levá spojení vrátit všechny úlohy, bez ohledu na to, zda mají připojený plán. Nebo můžete použít úplné spojení a jednoduše vrátit vše.