SQL Server Agent 是自動化維護、ETL、報表生成的核心引擎。本文詳細說明作業建立步驟、排程類型、通知機制、歷史記錄保留策略、常見錯誤(如 14274)排解,並提供最佳實務範本。
| 設定 | 預設 | 建議值(高頻作業) | 說明 |
| 作業歷程記錄最大筆數 | 1,000 | 10,000 ~ 100,000 | 總上限,超過則截斷最舊 |
| 每個作業最大歷程筆數 | 100 | 1,000 ~ 5,000 | 單一作業上限,防止單一高頻作業佔滿 |
| 保留天數 | 無限制 | 30 ~ 90 天 | 配合維護計畫清除舊記錄 |
計算範例: 作業每天跑 2 次,需保留 30 天 → 至少 60 筆/作業。若有 50 個作業,總筆數約 3,000,設總上限 10,000、單作業 500 即安全。
常見錯誤與排解
錯誤 14274:無法新增/更新/刪除來自 MSX 伺服器的作業
原因: 伺服器重命名後,msdb.dbo.sysjobs.originating_server 仍存舊名稱。
解法(不重啟服務):
USE msdb;
GO
DECLARE @OldName SYSNAME = 'OLD_SERVER_NAME';
DECLARE @NewName SYSNAME = @@SERVERNAME; -- 目前正確名稱
UPDATE sysjobs SET originating_server = @NewName WHERE originating_server = @OldName;
UPDATE sysjobservers SET server_id = (SELECT server_id FROM sysservers WHERE srvname = @NewName)
WHERE server_id = (SELECT server_id FROM sysservers WHERE srvname = @OldName);
-- 同步 sysjobschedules, sysjobsteps 等相關表(視版本而定)
執行後重新整理 Agent,作業即可正常編輯。
作業卡住、不執行
- 檢查 Agent 服務是否運行
- 檢查作業是否啟用、排程是否啟用、開始日期是否已過
- 查看
msdb.dbo.sysjobactivity 確認下次執行時間
- 檢查步驟命令語法、權限、連結伺服器可達性
監控與除錯查詢
-- 最近 24 小時作業執行狀態
SELECT
j.name AS JobName,
h.run_date, h.run_time,
h.run_duration,
CASE h.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN 'Succeeded' WHEN 2 THEN 'Retry' WHEN 3 THEN 'Canceled' END AS Status,
h.message
FROM msdb.dbo.sysjobhistory h
JOIN msdb.dbo.sysjobs j ON h.job_id = j.job_id
WHERE h.step_id = 0 -- 0 = 作業總結步驟
AND h.run_date >= CONVERT(INT, CONVERT(CHAR(8), DATEADD(DAY, -1, GETDATE()), 112))
ORDER BY h.run_date DESC, h.run_time DESC;
-- 正在執行的作業
SELECT
j.name, ja.start_execution_date,
DATEDIFF(SECOND, ja.start_execution_date, GETDATE()) AS RunningSeconds
FROM msdb.dbo.sysjobactivity ja
JOIN msdb.dbo.sysjobs j ON ja.job_id = j.job_id
WHERE ja.stop_execution_date IS NULL
AND ja.start_execution_date IS NOT NULL;
最佳實務清單
- 所有生產作業必須有失敗通知(Email + 事件日誌)。
- 長時間作業拆分為多步驟,並設定步驟級重試(重試間隔 5 分鐘、重試 3 次)。
- 維護類作業(備份、索引重建、統計更新)統一歸類,便於統一管理排程窗口。
- 定期匯出作業定義(
sp_help_job、sp_script_job)納入版控,支援災難恢復快速重建。
- 避免在作業步驟中直接寫入大量商業邏輯,改呼叫預存程序,利於測試與版本管理。
善用 Agent 作業,能將 DBA 從重複性操作中解放,實現真正的自動化營運。
- 上一篇文章: SQL Server 執行緒與纖程架構深度解析:排程器、工作項與效能調校
- 下一篇文章: SQL Server 匯出資料表到文字檔:BCP 工具與 DTS/SSIS 精靈完整指南
Copyright ©
程式碼之家 All Rights Reserved