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