2008-11-13 24 views

Trả lời

85

Có, trong MS SQL Server, bạn có thể tạo công việc theo lịch biểu. Trong SQL Management Studio, điều hướng đến máy chủ, sau đó mở rộng mục Tác nhân của SQL Server và cuối cùng là thư mục Công việc để xem, chỉnh sửa, thêm các công việc đã lên lịch.

+1

Thật lạ lùng với tôi rằng câu trả lời này đã nhận được nhiều sự ủng hộ hơn trong năm qua so với thời điểm giữa năm 2008 - 2013. Tại sao vậy? – Jeb

+1

có thể nó đã tăng lên đầu kết quả của google ... – blackorchid

4

Sử dụng Management Studio - bạn có thể tạo ra một công việc (SQL unter Server Agent) Một công việc có thể bao gồm nhiều bước từ kịch bản T-SQL lên đến SSIS Gói

Jeb đã nhanh hơn;)

16

Có, nếu bạn sử dụng Tác nhân máy chủ SQL.

Mở trình quản lý doanh nghiệp của bạn và chuyển đến thư mục Quản lý trong trường hợp SQL Server mà bạn quan tâm. Ở đó bạn sẽ thấy Tác nhân máy chủ SQL và bên dưới bạn sẽ thấy phần Công việc.

Tại đây bạn có thể tạo công việc mới và bạn sẽ thấy danh sách các bước bạn cần tạo. Khi bạn tạo một bước mới, bạn có thể chỉ định các bước để thực sự chạy một thủ tục được lưu trữ (loại TSQL Script). Chọn cơ sở dữ liệu, và sau đó cho phần lệnh đặt vào một cái gì đó như:

exec MyStoredProcedure

Đó là tổng quan, đăng lại đây nếu bạn cần thêm bất kỳ lời khuyên nào.

[Tôi thực sự nghĩ rằng tôi có thể nhận được trong đầu tiên trên thế này, cậu bé đã được tôi sai :)]

6

Tôi sẽ thêm một điều: nơi tôi đang ở, chúng tôi đã từng có một loạt các công việc hàng loạt mà chạy mỗi đêm. Tuy nhiên, chúng tôi đang di chuyển ra khỏi đó để sử dụng một ứng dụng khách được lên kế hoạch trong các cửa sổ theo lịch trình nhiệm vụ mà khởi động từng công việc. Có (ít nhất) ba lý do cho việc này:

  1. Chúng tôi cũng có một số chương trình điều khiển cần chạy mỗi đêm. Bằng cách này, tất cả các tác vụ được lên lịch có thể ở cùng một nơi. Tất nhiên, điều này tạo ra một điểm thất bại duy nhất, nhưng nếu các công việc bàn điều khiển không chạy, chúng tôi sẽ mất một ngày làm việc vào ngày hôm sau.
  2. Chương trình khởi động công việc ghi lại các thông báo in và lỗi từ máy chủ và ghi chúng vào nhật ký ứng dụng chung cho tất cả các quy trình theo lô của chúng tôi. Nó làm cho việc đăng nhập từ việc tạo các công việc sql đơn giản hơn nhiều.
  3. Nếu chúng ta cần nâng cấp máy chủ (và chúng tôi hy vọng sẽ thực hiện việc này sớm), chúng tôi không cần lo lắng về việc chuyển các công việc. Chỉ cần chỉ lại ứng dụng một lần.

Đó là một ứng dụng VB.Net thực sự ngắn: Tôi có thể đăng mã nếu có ai quan tâm.

+0

Không, tôi không cần mã, chỉ có ý tưởng chung. Cảm ơn nhiều. :) –

31

Nếu MS SQL Server Express Edition đang được sử dụng thì SQL Server Agent không khả dụng. Tôi tìm thấy sau đây làm việc cho tất cả các phiên bản:

USE Master 
GO 

IF EXISTS(SELECT * 
      FROM sys.objects 
      WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]') 
      AND type in (N'P', N'PC')) 
    DROP PROCEDURE [dbo].[MyBackgroundTask] 
GO 

CREATE PROCEDURE MyBackgroundTask 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- The interval between cleanup attempts 
    declare @timeToRun nvarchar(50) 
    set @timeToRun = '03:33:33' 

    while 1 = 1 
    begin 
     waitfor time @timeToRun 
     begin 
      execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure]; 
     end 
    end 
END 
GO 

-- Run the procedure when the master database starts. 
sp_procoption @ProcName = 'MyBackgroundTask', 
       @OptionName = 'startup', 
       @OptionValue = 'on' 
GO 

Một số lưu ý:

  • Điều đáng viết một entry kiểm toán ở đâu đó để bạn có thể thấy rằng các truy vấn thực sự chạy.
  • Máy chủ cần khởi động lại một lần để đảm bảo rằng tập lệnh chạy lần đầu tiên.
  • Một câu hỏi liên quan là: How to run a stored procedure every day in SQL Server Express Edition?
+0

là một quá trình không bao giờ kết thúc, một vòng lặp vô hạn? điều này sẽ thực hiện hàng ngày vào lúc '03: 33: 33 '? –

7

Có lẽ không phải là câu trả lời bạn đang tìm kiếm, nhưng tôi thấy nó hữu ích hơn chỉ đơn giản là sử dụng Windows Server Task Scheduler

Bạn có thể sử dụng trực tiếp các lệnh sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"

Hoặc thậm chí tạo một tệp .bat. Vì vậy, bạn thậm chí có thể 2x nhấp vào nhiệm vụ theo yêu cầu.

này cũng đã được tiếp cận trong này HERE

2

Bạn có thể sử dụng SQL Server Service Broker để tạo ra cơ chế tùy chỉnh thực hiện.

Idea (giản thể):

  1. Viết một thủ tục lưu trữ/kích hoạt bắt đầu một cuộc trò chuyện (BEGIN DIALOG) làm loopback (TỪ my_service ĐẾN my_service) - nhận chuyện handler

    DECLARE @dialog UNIQUEIDENTIFIER; 
    
    BEGIN DIALOG CONVERSATION @dialog 
         FROM SERVICE [name] 
         TO SERVICE  'name' 
         ...; 
    
  2. Bắt đầu bộ hẹn giờ cuộc trò chuyện

    DECLARE @time INT; 
    BEGIN CONVERSATION TIMER (@dialog) TIMEOUT = @time; 
    
  3. Sau số giây được chỉ định, một tin nhắn sẽ được gửi đến một dịch vụ. Nó sẽ được enqueued với hàng đợi liên quan.

    CREATE QUEUE queue_name WITH STATUS = ON, RETENTION = OFF 
          , ACTIVATION (STATUS = ON, PROCEDURE_NAME = <procedure_name> 
          , MAX_QUEUE_READERS = 20, EXECUTE AS N'dbo') 
           , POISON_MESSAGE_HANDLING (STATUS = ON) 
    
  4. Quy trình sẽ thực thi mã cụ thể và hẹn giờ có thể quay lại để kích hoạt lại.


Bạn có thể tìm thấy đầy đủ nung dung dịch (T-SQL) được viết bởi Michał Gołoś gọi Task Scheduler

Những điểm mấu chốt từ blog:

Ưu điểm:

  • Được hỗ trợ trên mỗi phiên bản (từ Express to Enterprise). Tác vụ Đại lý Máy chủ SQL không khả dụng cho SQL Server Express
  • Mức độ cơ sở dữ liệu đến phạm vi.Bạn có thể easiliy cơ sở dữ liệu di chuyển với nhiệm vụ liên quan (đặc biệt là khi bạn phải di chuyển khoảng 100 việc làm từ một enviromnent khác) đặc quyền
  • thấp hơn cần thiết để xem/thao tác công việc (cấp cơ sở dữ liệu)

phân biệt được đề xuất:

SQL server Agent (bảo trì):

  • sao lưu
  • index/thống kê phép tái xây dựng
  • sao chép

Task Scheduler (quy trình kinh doanh):

  • loại bỏ dữ liệu cũ
  • preaggregations/recalculations cyclic
  • denormalization

Làm thế nào để cài đặt nó:

  • get mã nguồn từ phần: "Do pobrania" - Để tải (cho phép môi giới/thiết lập tsks schema/table cấu hình + trigger + thủ tục lưu trữ)/thiết lập môi giới điều)
  • thiết lập bảng cấu hình [tsks].[tsksx_task_scheduler] thêm nhiệm vụ mới (cột tên là tự mô tả, nhiệm vụ mẫu bao gồm)

Cảnh báo: Blog được viết bằng tiếng Ba Lan nhưng mã nguồn liên quan là bằng tiếng Anh và nó rất dễ dàng để làm theo.

Cảnh báo 2: Trước khi sử dụng, hãy đảm bảo bạn đã thử nghiệm trên môi trường không sản xuất.

Các vấn đề liên quan