I SQL Server kan du bruge sp_update_job
gemt procedure til at ændre et eksisterende SQL Server Agent-job.
Eksempel
I dette eksempel opretter vi et job, derefter bruger vi sp_update_job
for at ændre det job.
Opret jobbet
Først skal du oprette jobbet:
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
Ovenstående kode bruger fem lagrede procedurer, men sp_update_job
proceduren opdaterer kun de detaljer, der blev oprettet med sp_add_job
procedure. De andre procedurer har deres egen matchende "opdaterings"-procedure.
Så bare for at være klar, er den følgende del den del, som vi kan opdatere med sp_update_job
procedure.
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
I dette tilfælde gav vi kun tre argumenter, da vi oprettede jobbet. Proceduren accepterer faktisk meget mere end det, men det eneste nødvendige argument er jobbets navn.
Opdater jobbet
Vi kan nu bruge sp_update_job
for at ændre ovenstående job.
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
Det eneste, dette eksempel gør, er at ændre navnet på jobbet.
sp_update_job
gemt procedure ændrer kun de indstillinger, for hvilke parameterværdier er leveret. Hvis en parameter udelades, bibeholdes den aktuelle indstilling.
Derfor kunne vi i dette tilfælde have udeladt beskrivelsen og kategorinavnet:
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB';
Deaktiver et job
Du kan deaktivere et job ved at indstille @enabled
til 0
:
EXEC sp_update_job
@job_name = N'BackupMoviesDB',
@new_name = N'BackupMoviesDB (DISABLED)',
@enabled = 0;
I dette eksempel ændrede jeg også jobbets navn for at gøre det tydeligt, at jobbet er deaktiveret.
Tjek opgaven
Du kan bruge sp_help_job
for at se de aktuelle indstillinger for et job.
Du kan bruge den med eller uden parametre. Når den bruges uden parametre, returnerer den alle job.
EXEC sp_help_job;
Hvis du kun ønsker at se detaljerne for ét job, kan du angive jobbets navn eller ID.
Sådan:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Her er, hvordan resultatet ser ud, når det udføres i SSMS:
Selvom du, når du angiver navnet, skal huske det efternavn, du gav jobbet. I vores tilfælde, hvis vi kører denne procedure efter det forrige eksempel (da vi deaktiverede jobbet), skulle vi gøre dette:
EXEC sp_help_job
@job_name = 'BackupMoviesDB (DISABLED)';
Jobbets ID forbliver dog konstant, så du kan bruge det uanset jobbets navn.
Eksempel:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Når du bruger ID'et, kan du udelade parameternavnet, hvis du ønsker det.
Eksempel:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Hvad sker der med jobtrinnene, tidsplanen osv.?
Ændring af et job bryder ikke jobbets trin og tidsplanoplysninger. Et jobs trin og tidsplan forbliver intakt, efter du har foretaget ændringer.
Hvis du har brug for at ændre trinene eller tidsplanen, skal du bruge den passende lagrede procedure for dem (brug f.eks. sp_update_schedule
for at opdatere dens tidsplan og sp_update_jobstep
for at opdatere sit jobtrin).
Fuld syntaks
Den fulde syntaks for sp_update_job
går sådan her:
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 ]
Se Microsofts dokumentation for sp_update_job
for en forklaring af hver parameter, samt de værdier, som hver accepterer.