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

Modificar un trabajo del Agente SQL Server (T-SQL)

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

Ejemplo

En este ejemplo, creamos un trabajo, luego usamos sp_update_job para modificar ese trabajo.

Crear el trabajo

Primero, crea el trabajo:

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

El código anterior usa cinco procedimientos almacenados pero el sp_update_job El procedimiento solo actualiza los detalles que se crearon con el sp_add_job procedimiento. Los otros procedimientos tienen su propio procedimiento de "actualización" coincidente.

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

EXEC sp_add_job  
    @job_name = N'BakMovies',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';

En este caso, solo proporcionamos tres argumentos al crear el trabajo. El procedimiento en realidad acepta mucho más que eso, pero el único argumento requerido es el nombre del trabajo.

Actualizar el trabajo

Ahora podemos usar sp_update_job para modificar el trabajo anterior.

EXEC sp_update_job  
    @job_name = N'BakMovies',
    @new_name = N'BackupMoviesDB',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';

Lo único que hace este ejemplo es cambiar el nombre del trabajo.

El sp_update_job 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 la descripción y el nombre de la categoría:

EXEC sp_update_job  
    @job_name = N'BakMovies',
    @new_name = N'BackupMoviesDB';

Deshabilitar un trabajo

Puede deshabilitar un trabajo configurando @enabled a 0 :

EXEC sp_update_job  
    @job_name = N'BackupMoviesDB',
    @new_name = N'BackupMoviesDB (DISABLED)',
    @enabled = 0;

En este ejemplo, también cambié el nombre del trabajo para que parezca que el trabajo está deshabilitado.

Comprobar el trabajo

Puedes usar sp_help_job para ver la configuración actual de un trabajo.

Puedes usarlo con o sin parámetros. Cuando se usa sin parámetros, devuelve todos los trabajos.

EXEC sp_help_job;

Si solo desea ver los detalles de un trabajo, puede 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:

Aunque, al proporcionar el nombre, deberá recordar el apellido que le dio al trabajo. En nuestro caso, si ejecutamos este procedimiento después del ejemplo anterior (cuando deshabilitamos el trabajo), tendríamos que hacer esto:

EXEC sp_help_job 
	@job_name = 'BackupMoviesDB (DISABLED)';

Sin embargo, la identificación del trabajo permanece constante, por lo que puede usarla independientemente del nombre del trabajo.

Ejemplo:

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

¿Qué ocurre con los pasos del trabajo, la programación, etc.?

La modificación de un trabajo no interrumpe los pasos de ese trabajo ni la información de programación. Los pasos y la programación de un trabajo permanecerán intactos después de realizar cualquier modificación.

Si necesita modificar los pasos o la programación, deberá usar el procedimiento almacenado apropiado para ellos (por ejemplo, use sp_update_schedule para actualizar su horario y sp_update_jobstep para actualizar su paso de trabajo).

Sintaxis completa

La sintaxis completa de sp_update_job va así:

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 ]

Consulte la documentación de Microsoft para sp_update_job para una explicación de cada parámetro, así como los valores que acepta cada uno.