sql >> Base de Datos >  >> RDS >> Sqlserver

Actualizar un paso de trabajo para un trabajo del Agente SQL Server (T-SQL)

En SQL Server, puede usar el sp_update_jobstep procedimiento almacenado para modificar un paso de trabajo existente de un trabajo del Agente SQL Server.

Cuando crea un trabajo del Agente SQL Server, crea uno o más pasos de trabajo para ese trabajo. El sp_update_jobstep El procedimiento le permite actualizar un paso de trabajo específico independientemente del trabajo real o cualquier otro paso de trabajo.

Ejemplo

En este ejemplo, creamos un trabajo con un paso de trabajo, luego usamos sp_update_jobstep para modificar el paso del trabajo.

Crear el trabajo

Primero, crea el trabajo:

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

El código anterior usa cinco procedimientos almacenados, pero el sp_add_jobstep El procedimiento es el único que contiene los detalles que se pueden cambiar con sp_update_jobstep . Los otros procedimientos tienen sus propios procedimientos de "actualización" coincidentes (como sp_update_job y sp_update_schedule ).

Para que quede claro, la siguiente parte es la parte que podemos actualizar con sp_update_jobstep procedimiento.

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;

En este caso proporcionamos seis argumentos al crear el trabajo. El procedimiento en realidad acepta mucho más que eso, pero esto servirá para nuestros propósitos.

Actualizar el paso de trabajo

Ahora podemos usar sp_update_jobstep para modificar el paso de trabajo anterior.

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;

Lo único que hace este ejemplo es aumentar los reintentos de 5 a 10 .

El sp_update_jobstep El procedimiento almacenado cambia solo las configuraciones para las que se proporcionan valores de parámetros. Si se omite un parámetro, se conserva la configuración actual.

Por lo tanto, en este caso, podríamos haber omitido los otros argumentos, así:

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

Comprobar el trabajo

Puedes usar sp_help_job para obtener información sobre los trabajos del Agente SQL Server en el sistema.

Puede usarlo con o sin parámetros, pero para obtener los detalles del paso del trabajo, debe proporcionar el nombre o ID del trabajo.

Me gusta esto:

EXEC sp_help_job 
	@job_name = 'BackupMoviesDB';

Así es como se ve el resultado al ejecutarlo en SSMS:

Aquí hay un ejemplo del código cuando se usa la ID:

EXEC sp_help_job 
	@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';

Al usar la ID, puede omitir el nombre del parámetro si lo desea.

Ejemplo:

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

Sintaxis completa

La sintaxis completa de sp_update_jobstep va así:

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 la documentación de Microsoft para sp_update_jobstep para una explicación de cada parámetro, así como los valores que acepta cada uno.

Tenga en cuenta que actualizar un paso de trabajo incrementa el número de versión del trabajo.