Khi bạn tạo công việc SQL Server Agent, bạn có tùy chọn tạo lịch biểu mới cho công việc đó hoặc sử dụng lịch biểu đã tồn tại.
Lịch trình công việc có thể được quản lý độc lập với các công việc. Bạn có thể sử dụng sp_add_schedule
để tạo lịch biểu và sp_attach_schedule
để gắn lịch trình với một công việc.
Điều này cho phép bạn đính kèm cùng một lịch biểu cho nhiều công việc.
Ví dụ
Giả sử chúng ta tạo một công việc bằng đoạn mã sau:
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
Mã đó bao gồm sp_add_schedule
thủ tục được lưu trữ. Thủ tục này tạo ra một lịch trình có thể được sử dụng cho bất kỳ số lượng công việc nào. Trong trường hợp của chúng tôi, chúng tôi đã gọi lịch biểu là RunDailyAM
.
Sau đó, chúng tôi sử dụng sp_attach_schedule
để đính kèm lịch biểu đó với công việc SQL Server Agent mà chúng tôi vừa tạo. Đây là thủ tục được lưu trữ mà chúng tôi có thể sử dụng để đính kèm lịch trình tương tự cho các công việc tiếp theo.
Bây giờ chúng ta hãy tạo một công việc SQL Server Agent khác, nhưng lần này chúng tôi sẽ không bao gồm sp_add_schedule
thủ tục:
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
Chúng tôi không sử dụng sp_add_schedule
vì chúng tôi đã sử dụng lịch trình đã được tạo trong công việc trước đó.
Tuy nhiên, chúng tôi đã sử dụng sp_attach_schedule
thủ tục được lưu trữ, vì chúng tôi cần đính kèm lịch biểu đã tạo trước đó với công việc mới của mình.
Vì vậy, cả hai công việc bây giờ sẽ chạy trên cùng một lịch trình.
Tìm hiểu có bao nhiêu công việc mà một lịch biểu được đính kèm
Bạn có thể sử dụng sp_help_jobcount
thủ tục trả về số lượng công việc mà một lịch trình nhất định được đính kèm. Chỉ cần cung cấp tên lịch trình hoặc ID khi gọi thủ tục.
Ví dụ:
EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';
Kết quả:
JobCount -------- 2