Ao criar um trabalho do SQL Server Agent, você tem a opção de criar um novo agendamento para esse trabalho ou usar um já existente.
Os agendamentos de trabalho podem ser gerenciados independentemente dos trabalhos. Você pode usar
sp_add_schedule
para criar a programação e sp_attach_schedule
para anexar a agenda a um trabalho. Isso permite anexar o mesmo agendamento a vários trabalhos.
Exemplo
Suponha que criamos um job usando o seguinte 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
Esse código incluía o
sp_add_schedule
procedimento armazenado. Este procedimento cria um agendamento que pode ser usado por qualquer número de trabalhos. No nosso caso, chamamos a programação de RunDailyAM
. Em seguida, usamos
sp_attach_schedule
para anexar esse agendamento ao trabalho do SQL Server Agent que acabamos de criar. Este é o procedimento armazenado que podemos usar para anexar o mesmo agendamento a trabalhos subsequentes. Agora vamos criar outro trabalho do SQL Server Agent, mas desta vez não vamos incluir o
sp_add_schedule
procedimento: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
Não usamos o
sp_add_schedule
procedimento, pois utilizamos o cronograma que já havia sido criado no trabalho anterior. No entanto, usamos o
sp_attach_schedule
procedimento armazenado, porque precisávamos anexar o agendamento criado anteriormente ao nosso novo trabalho. Portanto, ambos os trabalhos agora serão executados no mesmo agendamento.
Descubra a quantos trabalhos um cronograma está anexado
Você pode usar o
sp_help_jobcount
procedimento para retornar o número de trabalhos aos quais um determinado agendamento está anexado. Basta fornecer o nome ou ID do agendamento ao chamar o procedimento. Exemplo:
EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';
Resultado:
JobCount -------- 2