Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách sử dụng cùng một lịch biểu cho nhiều công việc tác nhân máy chủ SQL (T-SQL)

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tốt nhất để triển khai Hiệp hội đa hình trong SQL Server là gì?

  2. Truy xuất theo chương trình nguồn thủ tục được lưu trữ của SQL Server giống với nguồn được trả về bởi SQL Server Management Studio gui?

  3. Kết nối SAP IQ với SQL Server

  4. Cơ sở dữ liệu hệ thống máy chủ SQL - Bảo trì Tempdb

  5. Nhận ngôn ngữ hiện đang được sử dụng trong SQL Server