В SQL Server можете да използвате sp_update_job
съхранена процедура за промяна на съществуващо задание на SQL Server Agent.
Пример
В този пример създаваме задание, след което използваме sp_update_job
за да промените това задание.
Създайте работата
Първо, създайте заданието:
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
Горният код използва пет съхранени процедури, но sp_update_job
процедурата актуализира само онези подробности, които са създадени с sp_add_job
процедура. Другите процедури имат собствена съвпадаща процедура за „актуализация“.
Така че само за да е ясно, следващата част е частта, която можем да актуализираме с sp_update_job
процедура.
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
В този случай предоставихме само три аргумента при създаване на заданието. Процедурата всъщност приема много повече от това, но единственият задължителен аргумент е името на заданието.
Актуализирайте заданието
Вече можем да използваме sp_update_job
за да промените горната задача.
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
Единственото нещо, което прави този пример, е да промени името на заданието.
sp_update_job
съхранената процедура променя само тези настройки, за които са предоставени стойности на параметрите. Ако параметърът е пропуснат, текущата настройка се запазва.
Следователно в този случай бихме могли да пропуснем описанието и името на категорията:
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB';
Деактивиране на задание
Можете да деактивирате задание, като зададете @enabled
до 0
:
EXEC sp_update_job
@job_name = N'BackupMoviesDB',
@new_name = N'BackupMoviesDB (DISABLED)',
@enabled = 0;
В този пример също промених името на заданието, за да стане ясно, че задачата е деактивирана.
Проверете работата
Можете да използвате sp_help_job
за да видите текущите настройки на задание.
Можете да го използвате със или без параметри. Когато се използва без параметри, той връща всички задания.
EXEC sp_help_job;
Ако искате да видите подробностите само за една работа, можете да предоставите името или идентификатора на заданието.
Като това:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Ето как изглежда резултатът при изпълнението му в SSMS:
Въпреки че, когато предоставяте името, ще трябва да запомните фамилното име, на което сте дали работата. В нашия случай, ако изпълним тази процедура след предишния пример (когато сме деактивирали заданието), ще трябва да направим това:
EXEC sp_help_job
@job_name = 'BackupMoviesDB (DISABLED)';
Идентификационният номер на заданието обаче остава постоянен, така че можете да го използвате независимо от името на заданието.
Пример:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Когато използвате идентификатора, можете да пропуснете името на параметъра, ако желаете.
Пример:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Какво се случва със стъпките, графика и т.н.?
Промяната на задание не нарушава информацията за стъпките и графика на това задание. Стъпките и графикът на заданието ще останат непокътнати, след като направите каквито и да е промени.
Ако трябва да промените стъпките или графика, ще трябва да използвате съответната съхранена процедура за тях (например, използвайте sp_update_schedule
за да актуализира своя график и sp_update_jobstep
за да актуализирате своята стъпка на заданието).
Пълен синтаксис
Пълният синтаксис на sp_update_job
става така:
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 ]
Вижте документацията на Microsoft за sp_update_job
за обяснение на всеки параметър, както и стойностите, които всеки приема.