Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Aggiorna un passaggio del processo per un processo di SQL Server Agent (T-SQL)

In SQL Server puoi utilizzare sp_update_jobstep stored procedure per modificare un passaggio di un processo esistente di un processo di SQL Server Agent.

Quando crei un processo di SQL Server Agent, crei uno o più passaggi del processo per quel processo. Il sp_update_jobstep La procedura consente di aggiornare una fase di lavoro specifica indipendentemente dal lavoro effettivo o da qualsiasi altra fase di lavoro.

Esempio

In questo esempio, creiamo un lavoro con una fase del lavoro, quindi utilizziamo sp_update_jobstep per modificare la fase del lavoro.

Crea il lavoro

Innanzitutto, crea il lavoro:

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

Il codice precedente utilizza cinque stored procedure, ma sp_add_jobstep procedura è l'unica che contiene i dettagli che possono essere modificati con sp_update_jobstep . Le altre procedure hanno le proprie procedure di "aggiornamento" corrispondenti (come sp_update_job e sp_update_schedule ).

Quindi, solo per essere chiari, la parte seguente è la parte che possiamo aggiornare con sp_update_jobstep procedura.

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;

In questo caso abbiamo fornito sei argomenti durante la creazione del lavoro. La procedura in realtà accetta molto di più, ma questo andrà bene per i nostri scopi.

Aggiorna la fase del lavoro

Ora possiamo usare sp_update_jobstep per modificare la fase di lavoro precedente.

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;

L'unica cosa che fa questo esempio è aumentare i tentativi di ripetizione da 5 a 10 .

Il sp_update_jobstep 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 gli altri argomenti, come questo:

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

Controlla il lavoro

Puoi usare sp_help_job per ottenere informazioni sui processi di SQL Server Agent nel sistema.

Puoi usarlo con o senza parametri, ma per ottenere i dettagli della fase del lavoro, devi 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:

Ecco un esempio del codice quando si utilizza l'ID:

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

Sintassi completa

La sintassi completa di sp_update_jobstep va così:

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

Consulta la documentazione di Microsoft per sp_update_jobstep per una spiegazione di ciascun parametro, nonché dei valori che ciascuno accetta.

Tieni presente che l'aggiornamento di una fase di lavoro incrementa il numero di versione del lavoro.