萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL Server 警報無法觸發/通知失效完整排查清單

排查清單(按優先級)

1. 確認 Service Pack 版本

舊版已知 Alert Bug,必須打最新 SP/CU:

SELECT SERVERPROPERTY('ProductLevel');  -- 應為最新 SP/CU

2. SQL Server Agent 服務帳號

  • Local System:無網絡權限,無法寫遠端事件日誌、發郵件、訪問網絡共享
  • **必須**使用**域用戶帳號**,加入適當域組,具備:
    • 寫入應用程式日誌權限
    • SMTP 發信權限 / 頁面網關訪問
    • 作業所需網絡資源讀寫權限

3. 核心服務是否運行

-- 必須均為 Running
SELECT servicename, status FROM sys.dm_server_services
WHERE servicename IN ('SQL Server Agent', 'SQL Server');

服務管理器確認:
• SQL Server Agent
• EventLog (Windows 事件日誌服務)

4. 警報是否啟用

SSMS 路徑:
管理 → SQL Server Agent → 警報 → 右鍵屬性 → 「啟用」打勾

T-SQL 檢查:

SELECT name, is_enabled FROM msdb.dbo.sysalerts;

5. 檢查警報歷史記錄

SSMS:警報屬性 → 「歷史記錄」頁籤
查看最後觸發時間、觸發計數、是否有錯誤訊息。

6. 性能計數器採樣間隔

Agent 每 **20 秒** 採樣一次性能計數器。
若警報條件持續時間 < 20 秒,**極大概率漏掉**。
對策:改用 Extended Events 監控短時事件,或降低閾值延長持續時間。

7. 三大日誌交叉驗證

日誌位置關注點
SQL Server 錯誤日誌ERRORLOG引擎級錯誤、啟動/關閉、嚴重度 ≥ 17
SQL Server Agent 錯誤日誌SQLAGENT.OUTAgent 啟動、作業/警報執行、郵件發送失敗
Windows 應用程式日誌事件檢視器 → Windows 日誌 → 應用程式事件轉發、登入失敗、資源耗盡

**關鍵**:對齊三份日誌的**時間戳**,還原事故時間線。

8. 通知測試

若警報觸發但操作員未收到通知:

-- 手動測試郵件
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DBA_Alerts',
    @recipients = 'dba@company.com',
    @subject = 'Test Alert',
    @body = 'If you receive this, Database Mail works.';

-- 手動測試 net send (需 Messenger 服務)
EXEC master..xp_cmdshell 'msg * Test Message';

常見問題:郵件設定檔錯誤、收件人拼寫錯誤、SMTP 防火牆、郵件伺服器拒收。

預防性維護

  • 每月審核 msdb.dbo.sysalerts 啟用狀態
  • 每季發送測試警報驗證通知鏈路
  • 文檔化每個警報:用途、條件、預期動作、負責人、升級路徑

**警報系統像消防栓:平時不起眼,火災時必須出水。定期演練是唯一保證。**

copyright © 萬盛學電腦網 all rights reserved