SQL Serverエージェントジョブを作成する場合、そのジョブの新しいスケジュールを作成するか、既存のスケジュールを使用するかを選択できます。
ジョブスケジュールは、ジョブとは独立して管理できます。 sp_add_schedule
を使用できます スケジュールとsp_attach_schedule
を作成します スケジュールをジョブに添付します。
これにより、同じスケジュールを複数のジョブに添付できます。
例
次のコードを使用してジョブを作成するとします。
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
そのコードにはsp_add_schedule
が含まれていました ストアドプロシージャ。この手順により、任意の数のジョブで使用できるスケジュールが作成されます。この例では、スケジュールをRunDailyAM
と呼びました。 。
次に、sp_attach_schedule
を使用しました そのスケジュールを、作成したSQLServerエージェントジョブに添付します。これは、同じスケジュールを後続のジョブに添付するために使用できるストアドプロシージャです。
次に、別のSQL Serverエージェントジョブを作成しましょう。ただし、今回はsp_add_schedule
を含めません。 手順:
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
sp_add_schedule
は使用しませんでした 前のジョブで作成済みのスケジュールを使用したためです。
ただし、sp_attach_schedule
を使用しました 以前に作成したスケジュールを新しいジョブに添付する必要があったため、ストアドプロシージャ。
したがって、両方のジョブが同じスケジュールで実行されるようになります。
スケジュールが添付されているジョブの数を確認する
sp_help_jobcount
を使用できます 特定のスケジュールが関連付けられているジョブの数を返す手順。プロシージャを呼び出すときに、スケジュール名またはIDを入力するだけです。
例:
EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';
結果:
JobCount -------- 2