Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Modifier un travail de l'Agent SQL Server (T-SQL)

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.