Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So verwenden Sie denselben Zeitplan für mehrere SQL Server-Agent-Aufträge (T-SQL)

Wenn Sie einen SQL Server-Agent-Auftrag erstellen, haben Sie die Möglichkeit, einen neuen Zeitplan für diesen Auftrag zu erstellen oder einen bereits vorhandenen zu verwenden.

Jobpläne können unabhängig von Jobs verwaltet werden. Sie können sp_add_schedule verwenden um den Zeitplan und sp_attach_schedule zu erstellen um den Zeitplan an einen Job anzuhängen.

Dadurch können Sie denselben Zeitplan an mehrere Jobs anhängen.

Beispiel

Angenommen, wir erstellen einen Job mit dem folgenden Code:

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

Dieser Code enthielt den sp_add_schedule gespeicherte Prozedur. Dieses Verfahren erstellt einen Zeitplan, der von einer beliebigen Anzahl von Jobs verwendet werden kann. In unserem Fall haben wir den Zeitplan RunDailyAM genannt .

Wir haben dann sp_attach_schedule verwendet um diesen Zeitplan an den soeben erstellten SQL Server-Agent-Auftrag anzuhängen. Dies ist die gespeicherte Prozedur, die wir verwenden können, um denselben Zeitplan an nachfolgende Jobs anzuhängen.

Lassen Sie uns nun einen weiteren SQL Server Agent-Job erstellen, aber dieses Mal werden wir den sp_add_schedule nicht einschließen Verfahren:

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

Wir haben den sp_add_schedule nicht verwendet Verfahren, weil wir den Zeitplan verwendet haben, der bereits im vorherigen Job erstellt wurde.

Wir haben jedoch den sp_attach_schedule verwendet gespeicherte Prozedur, da wir den zuvor erstellten Zeitplan an unseren neuen Job anhängen mussten.

Beide Jobs werden nun also nach demselben Zeitplan ausgeführt.

Finden Sie heraus, wie vielen Jobs ein Zeitplan zugeordnet ist

Sie können den sp_help_jobcount verwenden Prozedur, um die Anzahl der Jobs zurückzugeben, denen ein bestimmter Zeitplan zugeordnet ist. Geben Sie beim Aufrufen der Prozedur einfach den Zeitplannamen oder die ID an.

Beispiel:

EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';

Ergebnis:

JobCount
--------
 2