V SQL Server můžete použít sp_update_job
uložená procedura pro úpravu existující úlohy SQL Server Agent.
Příklad
V tomto příkladu vytvoříme úlohu a poté použijeme sp_update_job
upravit tuto úlohu.
Vytvořte úlohu
Nejprve vytvořte úlohu:
USE msdb;
GO
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
GO
EXEC sp_add_jobstep
@job_name = N'BakMovies',
@step_name = N'Run the backup',
@subsystem = N'TSQL',
@command = N'BACKUP DATABASE [Movies] TO DISK = N''C:\Backups\Movies.bak'' WITH CHECKSUM',
@retry_attempts = 5,
@retry_interval = 5;
GO
EXEC sp_add_schedule
@schedule_name = N'Run_Sat_5AM',
@freq_type = 8,
@freq_interval = 64,
@freq_recurrence_factor = 1,
@active_start_time = 050000;
GO
EXEC sp_attach_schedule
@job_name = N'BakMovies',
@schedule_name = N'Run_Sat_5AM';
GO
EXEC sp_add_jobserver
@job_name = N'BakMovies';
GO
Výše uvedený kód používá pět uložených procedur, ale sp_update_job
procedura aktualizuje pouze ty podrobnosti, které byly vytvořeny pomocí sp_add_job
postup. Ostatní procedury mají svůj vlastní odpovídající „aktualizační“ postup.
Aby bylo jasno, následující část je část, kterou můžeme aktualizovat pomocí sp_update_job
postup.
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
V tomto případě jsme při vytváření úlohy poskytli pouze tři argumenty. Procedura ve skutečnosti přijímá mnohem více než to, ale jediným požadovaným argumentem je název úlohy.
Aktualizujte úlohu
Nyní můžeme použít sp_update_job
upravit výše uvedenou úlohu.
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
Jediné, co tento příklad dělá, je změna názvu úlohy.
sp_update_job
uložená procedura změní pouze ta nastavení, pro která jsou dodány hodnoty parametrů. Pokud je parametr vynechán, aktuální nastavení zůstane zachováno.
Proto jsme v tomto případě mohli vynechat popis a název kategorie:
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB';
Zakázat úlohu
Úlohu můžete deaktivovat nastavením @enabled
na 0
:
EXEC sp_update_job
@job_name = N'BackupMoviesDB',
@new_name = N'BackupMoviesDB (DISABLED)',
@enabled = 0;
V tomto příkladu jsem také změnil název úlohy, aby bylo zřejmé, že úloha je zakázána.
Zkontrolujte úlohu
Můžete použít sp_help_job
pro zobrazení aktuálního nastavení úlohy.
Můžete jej použít s parametry nebo bez nich. Při použití bez parametrů vrátí všechny úlohy.
EXEC sp_help_job;
Pokud chcete zobrazit podrobnosti pouze o jedné úloze, můžete zadat její název nebo ID.
Asi takto:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Takto vypadá výsledek při jeho spuštění v SSMS:
I když při zadávání jména si musíte pamatovat příjmení, které jste práci zadali. V našem případě, pokud spustíme tento postup po předchozím příkladu (když jsme úlohu deaktivovali), museli bychom udělat toto:
EXEC sp_help_job
@job_name = 'BackupMoviesDB (DISABLED)';
ID úlohy však zůstává konstantní, takže jej můžete použít bez ohledu na název úlohy.
Příklad:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Při použití ID můžete název parametru vynechat, chcete-li.
Příklad:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Co se stane s pracovními kroky, plánem atd.?
Úprava úlohy nenaruší kroky této úlohy a informace o plánu. Po provedení jakýchkoli úprav zůstanou kroky a plán úlohy nedotčeny.
Pokud potřebujete upravit kroky nebo plán, budete pro ně muset použít příslušnou uloženou proceduru (například použít sp_update_schedule
aktualizovat jeho plán a sp_update_jobstep
aktualizovat jeho krok úlohy).
Úplná syntaxe
Úplná syntaxe sp_update_job
vypadá takto:
sp_update_job [ @job_id =] job_id | [@job_name =] 'job_name'
[, [@new_name =] 'new_name' ]
[, [@enabled =] enabled ]
[, [@description =] 'description' ]
[, [@start_step_id =] step_id ]
[, [@category_name =] 'category' ]
[, [@owner_login_name =] 'login' ]
[, [@notify_level_eventlog =] eventlog_level ]
[, [@notify_level_email =] email_level ]
[, [@notify_level_netsend =] netsend_level ]
[, [@notify_level_page =] page_level ]
[, [@notify_email_operator_name =] 'operator_name' ]
[, [@notify_netsend_operator_name =] 'netsend_operator' ]
[, [@notify_page_operator_name =] 'page_operator' ]
[, [@delete_level =] delete_level ]
[, [@automatic_post =] automatic_post ]
Viz dokumentaci společnosti Microsoft pro sp_update_job
pro vysvětlení každého parametru a také hodnot, které každý přijímá.