Cuando crea un trabajo del Agente SQL Server, tiene la opción de crear un nuevo programa para ese trabajo o usar uno que ya existe.
Los horarios de trabajo se pueden administrar independientemente de los trabajos. Puede usar sp_add_schedule
para crear el horario y sp_attach_schedule
para adjuntar la programación a un trabajo.
Esto le permite adjuntar el mismo horario a varios trabajos.
Ejemplo
Supongamos que creamos un trabajo usando el siguiente código:
USE msdb;
GO
EXEC sp_add_job
@job_name = N'BackupPetHotelDB' ;
GO
EXEC sp_add_jobstep
@job_name = N'BackupPetHotelDB',
@step_name = N'Run the backup',
@subsystem = N'TSQL',
@command = N'BACKUP DATABASE [PetHotel] TO DISK = N''C:\Backups\PetHotel.bak'' WITH CHECKSUM',
@retry_attempts = 5,
@retry_interval = 5;
GO
EXEC sp_add_schedule
@schedule_name = N'RunDailyAM',
@freq_type = 4,
@freq_interval = 4,
@active_start_time = 041000;
GO
EXEC sp_attach_schedule
@job_name = N'BackupPetHotelDB',
@schedule_name = N'RunDailyAM';
GO
EXEC sp_add_jobserver
@job_name = N'BackupPetHotelDB';
GO
Ese código incluía el sp_add_schedule
procedimiento almacenado. Este procedimiento crea una programación que puede ser utilizada por cualquier número de trabajos. En nuestro caso, llamamos al horario RunDailyAM
.
Luego usamos sp_attach_schedule
para adjuntar ese programa al trabajo del Agente SQL Server que acabamos de crear. Este es el procedimiento almacenado que podemos usar para adjuntar el mismo horario a trabajos posteriores.
Ahora vamos a crear otro trabajo del Agente SQL Server, pero esta vez no incluiremos el sp_add_schedule
procedimiento:
USE msdb;
GO
EXEC dbo.sp_add_job
@job_name = N'BackupWorldDB' ;
GO
EXEC sp_add_jobstep
@job_name = N'BackupWorldDB',
@step_name = N'Run the backup',
@subsystem = N'TSQL',
@command = N'BACKUP DATABASE [World] TO DISK = N''C:\Backups\World.bak'' WITH CHECKSUM',
@retry_attempts = 5,
@retry_interval = 5;
GO
EXEC sp_attach_schedule
@job_name = N'BackupWorldDB',
@schedule_name = N'RunDailyAM';
GO
EXEC sp_add_jobserver
@job_name = N'BackupWorldDB',
@server_name = N'(LOCAL)';
GO
No usamos el sp_add_schedule
procedimiento, porque usamos el horario que ya había sido creado en el trabajo anterior.
Sin embargo, usamos el sp_attach_schedule
procedimiento almacenado, porque necesitábamos adjuntar el programa creado previamente a nuestro nuevo trabajo.
Entonces ambos trabajos ahora se ejecutarán en el mismo horario.
Averigüe a cuántos trabajos se adjunta un cronograma
Puede usar el sp_help_jobcount
procedimiento para devolver el número de trabajos a los que se adjunta una programación dada. Solo proporcione el nombre del programa o ID cuando llame al procedimiento.
Ejemplo:
EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';
Resultado:
JobCount -------- 2