Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment utiliser la même planification pour plusieurs travaux de l'Agent SQL Server (T-SQL)

Lorsque vous créez une tâche de l'Agent SQL Server, vous avez la possibilité de créer une nouvelle planification pour cette tâche ou d'en utiliser une qui existe déjà.

Les horaires des travaux peuvent être gérés indépendamment des travaux. Vous pouvez utiliser sp_add_schedule pour créer le planning et sp_attach_schedule pour joindre le planning à une tâche.

Cela vous permet d'associer la même planification à plusieurs tâches.

Exemple

Supposons que nous créons une tâche en utilisant le code suivant :

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

Ce code comprenait le sp_add_schedule procédure stockée. Cette procédure crée une planification qui peut être utilisée par n'importe quel nombre de travaux. Dans notre cas, nous avons appelé le planning RunDailyAM .

Nous avons ensuite utilisé sp_attach_schedule pour attacher cette planification au travail de l'Agent SQL Server que nous venons de créer. Il s'agit de la procédure stockée que nous pouvons utiliser pour attacher la même planification aux tâches suivantes.

Créons maintenant un autre travail de l'Agent SQL Server, mais cette fois nous n'inclurons pas le sp_add_schedule procédure :

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

Nous n'avons pas utilisé le sp_add_schedule procédure, car nous avons utilisé le calendrier qui avait déjà été créé dans le travail précédent.

Nous avons cependant utilisé le sp_attach_schedule procédure stockée, car nous devions attacher la planification précédemment créée à notre nouveau travail.

Ainsi, les deux tâches s'exécuteront désormais selon le même calendrier.

Découvrez le nombre de tâches auxquelles une planification est associée

Vous pouvez utiliser le sp_help_jobcount procédure pour renvoyer le nombre de travaux auxquels une planification donnée est attachée. Indiquez simplement le nom ou l'ID de la planification lors de l'appel de la procédure.

Exemple :

EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';

Résultat :

JobCount
--------
 2