Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come utilizzare la stessa pianificazione per più processi di SQL Server Agent (T-SQL)

Quando crei un processo di SQL Server Agent, hai la possibilità di creare una nuova pianificazione per quel processo o di utilizzarne uno già esistente.

Le pianificazioni dei lavori possono essere gestite indipendentemente dai lavori. Puoi usare sp_add_schedule per creare la pianificazione e sp_attach_schedule per allegare la pianificazione a un lavoro.

Ciò ti consente di allegare la stessa pianificazione a più lavori.

Esempio

Supponiamo di creare un lavoro utilizzando il seguente codice:

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

Quel codice includeva sp_add_schedule procedura memorizzata. Questa procedura crea una pianificazione che può essere utilizzata da un numero qualsiasi di lavori. Nel nostro caso, abbiamo chiamato la pianificazione RunDailyAM .

Abbiamo quindi utilizzato sp_attach_schedule per allegare tale pianificazione al processo di SQL Server Agent appena creato. Questa è la procedura memorizzata che possiamo utilizzare per allegare la stessa pianificazione ai lavori successivi.

Ora creiamo un altro processo di SQL Server Agent, ma questa volta non includeremo il sp_add_schedule procedura:

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

Non abbiamo utilizzato il sp_add_schedule procedura, perché abbiamo utilizzato la pianificazione che era già stata creata nel lavoro precedente.

Tuttavia, abbiamo utilizzato sp_attach_schedule stored procedure, perché dovevamo allegare la pianificazione precedentemente creata al nostro nuovo lavoro.

Quindi entrambi i lavori verranno eseguiti con la stessa pianificazione.

Scopri a quanti lavori è allegato un programma

Puoi usare sp_help_jobcount procedura per restituire il numero di lavori a cui è allegata una determinata pianificazione. Basta fornire il nome o l'ID della pianificazione quando si chiama la procedura.

Esempio:

EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';

Risultato:

JobCount
--------
 2