SQL Server Agent 錯誤日誌記錄作業執行、警示、錯誤等關鍵資訊。妥善配置與維護日誌,是排查 Agent 異常、監控作業健康度的基礎。
MSSQL\LOG\SQLAGENT.OUT (當前)、SQLAGENT.1~.9 (歷史歸檔,最多 9 個)。-- 1. 查看日誌內容 (需啟用 xp_cmdshell)
EXEC xp_cmdshell 'type "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\SQLAGENT.OUT"';
-- 2. 修改日誌檔路徑 (重啟 Agent 生效)
EXEC msdb.dbo.sp_set_sqlagent_properties @errorlog_file = N'D:\SQLLogs\SQLAGENT.OUT';
-- 3. 設定錯誤訊息接收者 (net send, 需 Messenger 服務)
EXEC msdb.dbo.sp_set_sqlagent_properties @error_recipient = N'AdminUser';
-- 4. 配置記錄層級 (位元遮罩: 1=錯誤, 2=警告, 4=資訊/追蹤)
-- 僅錯誤: 1; 錯誤+警告: 3; 全部: 7
EXEC msdb.dbo.sp_set_sqlagent_properties @errorlogging_level = 7;
-- 5. 設定 Unicode 編碼 (解決中文亂碼、管理工具報錯)
EXEC msdb.dbo.sp_set_sqlagent_properties @oem_errorlog = 0; -- 0=Unicode, 1=OEM
-- 6. 手動循環日誌 (關閉當前、開啟新檔、歸檔舊檔)
EXEC msdb.dbo.sp_cycle_agent_errorlog;
-- 7. 設定歷史記錄最大行數
EXEC msdb.dbo.sp_set_sqlagent_properties @jobhistory_max_rows = 10000;
EXEC msdb.dbo.sp_set_sqlagent_properties @jobhistory_max_rows_per_job = 500;
| 現象 | 原因 | 解決 |
|---|---|---|
| 日誌內容為空、不記錄 | OEM 編碼與系統代碼頁不符 | @oem_errorlog = 0 改 Unicode |
| SSMS 查看報 "unicode file expected" | 日誌為 OEM,SSMS 期望 Unicode | 同上,改 Unicode 並循環日誌 |
| SQL 2000 Agent 日誌無法循環 | 版本限制,不支援 sp_cycle_agent_errorlog | 手動重命名檔案、重啟 Agent |
| 作業歷史被截斷 | 超過 @jobhistory_max_rows_per_job | 調大限制或縮短作業步驟輸出 |
| net send 不收到訊息 | Messenger 服務未啟動/防火牆阻擋 | 改用 Database Mail + 警示回應 |
@oem_errorlog=0 並循環日誌。SQL Server Agent 日誌雖非資料庫核心,卻是自動化營運可觀測性的關鍵。花幾分鐘配置正確編碼與循環策略,能省去無數個深夜排查的痛苦。