SQL Server Agent 警示機制故障排查八步驟
當預設警示未如期觸發,請依序檢查以下關鍵點:
- 套用最新 Service Pack / CU
修正已知 Alert 相關 Bug。確認 SELECT @@VERSION 版本為最新支援版本。
- SQL Server Agent 服務帳號權限
- Local System:無網路存取權,無法寫入遠端事件日誌、發送郵件/傳呼、存取網路資源。
- 解決:改用具備網路權限的 網域使用者帳號 (Domain User),加入本機 Administrators 群組或授予「作為服務登入」、「調整程序記憶體配額」等權限。
- 核心服務運行狀態
確認 SQLServerAgent 與 EventLog 服務均為「已啟動」。若停用,警示引擎無法輪詢事件。
- 警示啟用狀態
Enterprise Manager / SSMS → Management → SQL Server Agent → Alerts → 確認目標警示 Enabled = True。
- 警示歷史記錄
查看警示屬性 → History 頁籤,確認上次觸發時間。若從未觸發,問題在條件判斷;若曾觸發但近期無,可能為條件值變化。
- 效能計數器輪詢間隔 (20 秒)
Agent 每 20 秒讀取一次效能計數器。若閾值條件持續時間 < 20 秒 (尖峰),警示將漏判。
對策:調整閾值持續時間、改用事件型警示 (WMI/Event Log) 而非計數器型。
- 錯誤日誌交叉比對
同步檢查三份日誌的時間戳記與錯誤碼:
- SQL Server Error Log (
sp_readerrorlog)
- SQL Server Agent Error Log (預設
LOG 目錄下 SQLAGENT.OUT)
- Windows Application Event Log (Event Viewer)
- 操作員通知遞送測試
警示觸發但操作員未收到郵件/傳呼/Net Send:
手動在 Agent → Operators → 測試郵件設定 (Database Mail / SQL Mail)、傳呼設定、net send 指令。
常見原因:Database Mail 未設定、SMTP 伺服器拒絡、防火牆封阻、操作員排程未含當前時段。
快速診斷腳本
-- 檢查 Agent 服務帳號
EXEC master..xp_regread 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\SQLServerAgent', 'ObjectName';
-- 檢查警示啟用狀態
SELECT name, enabled, last_occurrence_date, last_occurrence_time
FROM msdb.dbo.sysalerts;