Dans SQL Server, vous pouvez utiliser le sp_update_job
procédure stockée pour modifier un travail existant de l'Agent SQL Server.
Exemple
Dans cet exemple, nous créons un travail, puis nous utilisons sp_update_job
pour modifier ce travail.
Créer la tâche
Tout d'abord, créez la tâche :
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
Le code ci-dessus utilise cinq procédures stockées mais le sp_update_job
la procédure ne met à jour que les détails qui ont été créés avec le sp_add_job
procédure. Les autres procédures ont leur propre procédure de "mise à jour" correspondante.
Donc, juste pour être clair, la partie suivante est la partie que nous pouvons mettre à jour avec le sp_update_job
procédure.
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
Dans ce cas, nous n'avons fourni que trois arguments lors de la création de la tâche. La procédure accepte en fait beaucoup plus que cela, mais le seul argument requis est le nom du travail.
Mettre à jour la tâche
Nous pouvons maintenant utiliser sp_update_job
pour modifier le travail ci-dessus.
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
La seule chose que fait cet exemple est de changer le nom du travail.
Le sp_update_job
procédure stockée modifie uniquement les paramètres pour lesquels des valeurs de paramètre sont fournies. Si un paramètre est omis, le réglage actuel est conservé.
Par conséquent, dans ce cas, nous aurions pu omettre la description et le nom de la catégorie :
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB';
Désactiver une tâche
Vous pouvez désactiver une tâche en définissant @enabled
à 0
:
EXEC sp_update_job
@job_name = N'BackupMoviesDB',
@new_name = N'BackupMoviesDB (DISABLED)',
@enabled = 0;
Dans cet exemple, j'ai également changé le nom du travail pour indiquer clairement que le travail est désactivé.
Vérifier le travail
Vous pouvez utiliser sp_help_job
pour afficher les paramètres actuels d'une tâche.
Vous pouvez l'utiliser avec ou sans paramètres. Lorsqu'il est utilisé sans paramètres, il renvoie tous les travaux.
EXEC sp_help_job;
Si vous souhaitez uniquement voir les détails d'une tâche, vous pouvez fournir le nom ou l'ID de la tâche.
Comme ceci :
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Voici à quoi ressemble le résultat lors de son exécution dans SSMS :
Cependant, lorsque vous fournissez le nom, vous devrez vous souvenir du nom de famille que vous avez donné au travail. Dans notre cas, si nous exécutons cette procédure après l'exemple précédent (lorsque nous avons désactivé le travail), nous aurions besoin de faire ceci :
EXEC sp_help_job
@job_name = 'BackupMoviesDB (DISABLED)';
Cependant, l'ID du travail reste constant, vous pouvez donc l'utiliser quel que soit le nom du travail.
Exemple :
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Lorsque vous utilisez l'ID, vous pouvez omettre le nom du paramètre si vous le souhaitez.
Exemple :
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Qu'advient-il des étapes de travail, du calendrier, etc. ?
La modification d'une tâche n'interrompt pas les étapes et les informations de planification de cette tâche. Les étapes et le calendrier d'une tâche resteront intacts après que vous ayez apporté des modifications.
Si vous devez modifier les étapes ou la planification, vous devrez utiliser la procédure stockée appropriée (par exemple, utilisez sp_update_schedule
pour mettre à jour son planning et sp_update_jobstep
pour mettre à jour son étape de travail).
Syntaxe complète
La syntaxe complète de sp_update_job
va comme ceci :
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 ]
Voir la documentation de Microsoft pour sp_update_job
pour une explication de chaque paramètre, ainsi que les valeurs que chacun accepte.