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

Mettre à jour une étape de travail pour un travail de l'Agent SQL Server (T-SQL)

Dans SQL Server, vous pouvez utiliser le sp_update_jobstep procédure stockée pour modifier une étape de travail existante d'un travail de l'Agent SQL Server.

Lorsque vous créez un travail de l'Agent SQL Server, vous créez une ou plusieurs étapes de travail pour ce travail. Le sp_update_jobstep La procédure vous permet de mettre à jour une étape de travail spécifique indépendamment du travail réel ou de toute autre étape de travail.

Exemple

Dans cet exemple, nous créons un travail avec une étape de travail, puis nous utilisons sp_update_jobstep pour modifier l'étape du travail.

Créer la tâche

Tout d'abord, créez la tâche :

USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'BackupMoviesDB',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';
GO  
EXEC sp_add_jobstep  
    @job_name = N'BackupMoviesDB',  
    @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'BackupMoviesDB',  
   @schedule_name = N'Run_Sat_5AM';
GO  
EXEC sp_add_jobserver  
    @job_name = N'BackupMoviesDB';
GO

Le code ci-dessus utilise cinq procédures stockées, mais le sp_add_jobstep la procédure est la seule qui contient les détails qui peuvent être modifiés avec sp_update_jobstep . Les autres procédures ont leurs propres procédures de "mise à jour" correspondantes (telles que sp_update_job et sp_update_schedule ).

Donc, juste pour être clair, la partie suivante est la partie que nous pouvons mettre à jour avec le sp_update_jobstep procédure.

EXEC sp_add_jobstep  
    @job_name = N'BackupMoviesDB',  
    @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;

Dans ce cas, nous avons fourni six arguments lors de la création du travail. La procédure accepte en fait beaucoup plus que cela, mais cela suffira pour nos besoins.

Mettre à jour l'étape de la tâche

Nous pouvons maintenant utiliser sp_update_jobstep pour modifier l'étape de travail ci-dessus.

EXEC sp_update_jobstep  
    @job_name = N'BackupMoviesDB',
    @step_id = 1,  
    @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 = 10,  
    @retry_interval = 5;

La seule chose que fait cet exemple est d'augmenter le nombre de tentatives à partir de 5 à 10 .

Le sp_update_jobstep 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 les autres arguments, comme ceci :

EXEC sp_update_jobstep  
    @job_name = N'BackupMoviesDB',
    @step_id = 1,
    @retry_attempts = 10;

Vérifier le travail

Vous pouvez utiliser sp_help_job pour obtenir des informations sur les travaux de l'Agent SQL Server dans le système.

Vous pouvez l'utiliser avec ou sans paramètres, mais pour obtenir les détails de l'étape de la tâche, vous devez 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 :

Voici un exemple de code lors de l'utilisation de l'ID :

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';

Syntaxe complète

La syntaxe complète de sp_update_jobstep va comme ceci :

sp_update_jobstep   
     {   [@job_id =] job_id   
       | [@job_name =] 'job_name' } ,  
     [@step_id =] step_id  
     [ , [@step_name =] 'step_name' ]  
     [ , [@subsystem =] 'subsystem' ]   
     [ , [@command =] 'command' ]  
     [ , [@additional_parameters =] 'parameters' ]  
     [ , [@cmdexec_success_code =] success_code ]  
     [ , [@on_success_action =] success_action ]   
     [ , [@on_success_step_id =] success_step_id ]  
     [ , [@on_fail_action =] fail_action ]   
     [ , [@on_fail_step_id =] fail_step_id ]  
     [ , [@server =] 'server' ]   
     [ , [@database_name =] 'database' ]  
     [ , [@database_user_name =] 'user' ]   
     [ , [@retry_attempts =] retry_attempts ]  
     [ , [@retry_interval =] retry_interval ]   
     [ , [@os_run_priority =] run_priority ]  
     [ , [@output_file_name =] 'file_name' ]   
     [ , [@flags =] flags ]  
     [ ,  {   [ @proxy_id = ] proxy_id   
            | [ @proxy_name = ] 'proxy_name' }

Consultez la documentation de Microsoft pour sp_update_jobstep pour une explication de chaque paramètre, ainsi que les valeurs que chacun accepte.

Notez que la mise à jour d'une étape de tâche incrémente le numéro de version de la tâche.