首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 定時任務完整指南:使用 SQL Server Agent 建立排程作業

     編輯:關於SqlServer

前言

在 SQL Server 環境中,若需定時執行預存程序或特定 T-SQL 指令(長度不超過 3200 字元),最標準的做法是透過 SQL Server Agent 的「作業」功能來實現。本文將詳細說明從建立作業、設定步驟、排程、通知,到歷史記錄管理、伺服器重命名後的錯誤排除,以及作業遷移的完整流程。

一、前置條件

  • 必須安裝 SQL Server Enterprise Edition(企業版)或 Developer Edition,SQL Server Agent 服務才會可用。
  • SQL Server Agent 服務必須處於啟動狀態,且其啟動帳戶需與 SQL Server 資料庫引擎服務的啟動帳戶一致。
  • 在 SSMS (SQL Server Management Studio) 中,於物件總管展開「SQL Server Agent」→「作業」即可開始操作。

二、建立排程作業的詳細步驟

1. 建立新作業

在 SSMS 中右鍵點選「作業」→「新增作業」,開啟「新增作業」視窗。

2. 一般設定

  • 名稱:自訂具備辨識度的作業名稱。
  • 啟用:勾選此核取方塊,作業才會依排程執行。
  • 類別:可選擇預設的「[未分類 (本機)]」或自行建立分類(透過右鍵「作業」→「管理作業分類」新增)。
  • 擁有者:預設為目前登入的 SQL Server 使用者,亦可指定其他登入帳號。
  • 描述:詳細記錄此作業的用途、執行邏輯等資訊,利於後續維護。

3. 步驟設定

切換至「步驟」頁籤,點選「新增」:

  • 步驟名稱:自訂。
  • 類型:選擇「Transact-SQL 指令碼 (TSQL)」。
  • 資料庫:指定要操作的目標資料庫。
  • 命令:
    • 簡單的 SQL 陳述式可直接輸入。
    • 複雜指令可點選「開啟」載入現有的 .sql 檔案。
    • 執行預存程序格式:EXEC dbo.ProcedureName @Param1, @Param2, ...

若有多個步驟,可重複新增,並利用「移動」、「編輯」、「刪除」按鈕調整順序與邏輯。

4. 排程設定

切換至「排程」頁籤,點選「新增排程」:

  • 名稱:自訂排程名稱。
  • 啟用:勾選。
  • 排程類型:選擇「週期性」。
  • 點選「變更」進入詳細排程設定,可依需求設定每日、每週、每月、特定時間間隔等。

若暫時不想讓作業自動執行,只需取消勾選「啟用」即可保存作業但不排程。

5. 通知設定

切換至「通知」頁籤,預設勾選「作業失敗時寫入 Windows 應用程式事件記錄」即可,亦可依需求設定電子郵件、網傳或分頁伺服器通知。

三、作業歷史記錄管理

若發現部分作業歷史記錄過多、部分過少,可調整記錄保留上限:

  1. 右鍵點選「SQL Server Agent」→「屬性」→「歷史記錄」。
  2. 作業歷史記錄最大筆數 (行):預設 1000,作業數量大時建議調大(如 100000)。
  3. 每個作業歷史記錄最大筆數:預設 100。若作業每天執行 2 欲保留 1 個月記錄,可設為 60 (2次 × 30天)。

兩者有相互制約關係,請依實際需求調整。

四、常見問題排除:錯誤 14274

現象:伺服器重新命名後,嘗試新增、更新、刪除作業時出現錯誤 14274:「無法從 MSX 伺服器新增、更新或刪除作業」。

原因:msdb.dbo.sysjobs 表的 originating_server 欄位仍存舊伺服器名稱。

解決方案(無需重啟服務,適合 24x7 環境):

USE msdb;
GO
SELECT job_id, name, originating_server FROM sysjobs WHERE originating_server <> @@SERVERNAME;
GO
-- 找到對應的 job_id 後執行更新
UPDATE sysjobs SET originating_server = @@SERVERNAME WHERE job_id = 'B23BBEBE-A3C1-4874-A4AB-0E2B7CD01E14';
GO

更新完成後即可正常管理該作業。

五、作業遷移至其他伺服器

  1. 在來源伺服器 SSMS 中,右鍵「作業」→「所有工作」→「產生 SQL 指令碼」。
  2. 選擇「指令碼所有作業」或僅指定特定作業,儲存為 .sql 檔案。
  3. 在目標伺服器上執行該指令碼。

注意事項:

  • 若指令碼中的建立者、通知操作員、或記錄檔路徑在目標伺服器不存在,執行會報錯。需先建立對應的 Windows 帳號或 SQL 登入,或修改指令碼替換為現有帳號、修正路徑(如 D:\ 改 F:)。
  • 指令碼中若包含 GO 批次分隔符,在某些執行環境下可能報錯,可移除後再執行。

六、小結

善用 SQL Server Agent 作業可有效自動化資料庫維護、資料同步、報表產出等常態性工作。掌握建立、排程、歷史管理、錯誤排除與遷移技巧,能大幅提升 DBA 運維效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved