In SQL Server puoi usare sp_update_job
stored procedure per modificare un processo di SQL Server Agent esistente.
Esempio
In questo esempio, creiamo un lavoro, quindi utilizziamo sp_update_job
per modificare quel lavoro.
Crea il lavoro
Innanzitutto, crea il lavoro:
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
Il codice precedente utilizza cinque stored procedure ma il sp_update_job
la procedura aggiorna solo quei dettagli che sono stati creati con il sp_add_job
procedura. Le altre procedure hanno la propria procedura di "aggiornamento" corrispondente.
Quindi, solo per essere chiari, la parte seguente è la parte che possiamo aggiornare con sp_update_job
procedura.
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
In questo caso abbiamo fornito solo tre argomenti durante la creazione del lavoro. La procedura in realtà accetta molto di più, ma l'unico argomento richiesto è il nome del lavoro.
Aggiorna il lavoro
Ora possiamo usare sp_update_job
per modificare il lavoro di cui sopra.
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
L'unica cosa che fa questo esempio è cambiare il nome del lavoro.
Il sp_update_job
stored procedure modifica solo le impostazioni per le quali vengono forniti i valori dei parametri. Se un parametro viene omesso, l'impostazione corrente viene mantenuta.
Pertanto, in questo caso, avremmo potuto omettere la descrizione e il nome della categoria:
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB';
Disabilita un lavoro
Puoi disabilitare un lavoro impostando @enabled
a 0
:
EXEC sp_update_job
@job_name = N'BackupMoviesDB',
@new_name = N'BackupMoviesDB (DISABLED)',
@enabled = 0;
In questo esempio ho anche cambiato il nome del lavoro per rendere evidente che il lavoro è disabilitato.
Controlla il lavoro
Puoi usare sp_help_job
per visualizzare le impostazioni correnti di un lavoro.
Puoi usarlo con o senza parametri. Se utilizzato senza parametri, restituisce tutti i lavori.
EXEC sp_help_job;
Se desideri visualizzare i dettagli di un solo lavoro, puoi fornire il nome o l'ID del lavoro.
In questo modo:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Ecco come appare il risultato quando lo si esegue in SSMS:
Anche se, quando fornisci il nome, dovrai ricordare il cognome che hai assegnato al lavoro. Nel nostro caso, se eseguiamo questa procedura dopo l'esempio precedente (quando abbiamo disabilitato il lavoro), dovremmo farlo:
EXEC sp_help_job
@job_name = 'BackupMoviesDB (DISABLED)';
Tuttavia, l'ID del lavoro rimane costante, quindi puoi utilizzarlo indipendentemente dal nome del lavoro.
Esempio:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Quando si utilizza l'ID, se lo si desidera, è possibile omettere il nome del parametro.
Esempio:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Cosa succede alle fasi del lavoro, alla pianificazione e così via?
La modifica di un lavoro non interrompe i passaggi del lavoro e le informazioni sulla pianificazione. I passaggi e la pianificazione di un lavoro rimarranno intatti dopo aver apportato modifiche.
Se è necessario modificare i passaggi o la pianificazione, è necessario utilizzare la procedura memorizzata appropriata per essi (ad esempio, utilizzare sp_update_schedule
per aggiornare la sua pianificazione e sp_update_jobstep
per aggiornare la sua fase di lavoro).
Sintassi completa
La sintassi completa di sp_update_job
va così:
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 ]
Consulta la documentazione di Microsoft per sp_update_job
per una spiegazione di ciascun parametro, nonché dei valori che ciascuno accetta.