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

Como usar o mesmo agendamento para vários trabalhos do SQL Server Agent (T-SQL)


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