Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Atualizar uma etapa de trabalho para um trabalho do SQL Server Agent (T-SQL)


No SQL Server, você pode usar o sp_update_jobstep procedimento armazenado para modificar uma etapa de trabalho existente de um trabalho do SQL Server Agent.

Ao criar um trabalho do SQL Server Agent, você cria uma ou mais etapas de trabalho para esse trabalho. O sp_update_jobstep procedimento permite que você atualize uma etapa de trabalho específica independente do trabalho real ou de quaisquer outras etapas de trabalho.

Exemplo


Neste exemplo, criamos um trabalho com uma etapa de trabalho e usamos sp_update_jobstep para modificar a etapa do trabalho.

Criar o trabalho


Primeiro, crie o trabalho:
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

O código acima usa cinco procedimentos armazenados, mas o sp_add_jobstep procedimento é o único que contém os detalhes que podem ser alterados com sp_update_jobstep . Os outros procedimentos têm seus próprios procedimentos de “atualização” correspondentes (como sp_update_job e sp_update_schedule ).

Então, para ficar claro, a parte a seguir é a parte que podemos atualizar com o sp_update_jobstep procedimento.
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;

Nesse caso, fornecemos seis argumentos ao criar o trabalho. O procedimento realmente aceita muito mais do que isso, mas isso servirá para nossos propósitos.

Atualizar a etapa do trabalho


Agora podemos usar sp_update_jobstep para modificar a etapa de trabalho acima.
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;

A única coisa que este exemplo faz é aumentar as tentativas de repetição de 5 para 10 .

O sp_update_jobstep O procedimento armazenado altera apenas as configurações para as quais os valores de parâmetro são fornecidos. Se um parâmetro for omitido, a configuração atual será mantida.

Portanto, neste caso, poderíamos ter omitido os outros argumentos, como este:
EXEC sp_update_jobstep  
    @job_name = N'BackupMoviesDB',
    @step_id = 1,
    @retry_attempts = 10;

Verifique o trabalho


Você pode usar sp_help_job para obter informações sobre os trabalhos do SQL Server Agent no sistema.

Você pode usá-lo com ou sem parâmetros, mas para obter os detalhes da etapa do trabalho, você precisa fornecer o nome ou ID do trabalho.

Assim:
EXEC sp_help_job 
	@job_name = 'BackupMoviesDB';

Veja como fica o resultado ao executá-lo no SSMS:

Aqui está um exemplo do código ao usar o ID:
EXEC sp_help_job 
	@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';

Ao usar o ID, você pode omitir o nome do parâmetro, se desejar.

Exemplo:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';

Sintaxe Completa


A sintaxe completa de sp_update_jobstep fica assim:
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' }

Consulte a documentação da Microsoft para sp_update_jobstep para uma explicação de cada parâmetro, bem como os valores que cada um aceita.

Observe que a atualização de uma etapa do trabalho incrementa o número da versão do trabalho.