舊版已知 Alert Bug,必須打最新 SP/CU:
SELECT SERVERPROPERTY('ProductLevel'); -- 應為最新 SP/CU
-- 必須均為 Running
SELECT servicename, status FROM sys.dm_server_services
WHERE servicename IN ('SQL Server Agent', 'SQL Server');
服務管理器確認:
• SQL Server Agent
• EventLog (Windows 事件日誌服務)
SSMS 路徑:
管理 → SQL Server Agent → 警報 → 右鍵屬性 → 「啟用」打勾
T-SQL 檢查:
SELECT name, is_enabled FROM msdb.dbo.sysalerts;
SSMS:警報屬性 → 「歷史記錄」頁籤
查看最後觸發時間、觸發計數、是否有錯誤訊息。
Agent 每 **20 秒** 採樣一次性能計數器。
若警報條件持續時間 < 20 秒,**極大概率漏掉**。
對策:改用 Extended Events 監控短時事件,或降低閾值延長持續時間。
| 日誌 | 位置 | 關注點 |
|---|---|---|
| SQL Server 錯誤日誌 | ERRORLOG | 引擎級錯誤、啟動/關閉、嚴重度 ≥ 17 |
| SQL Server Agent 錯誤日誌 | SQLAGENT.OUT | Agent 啟動、作業/警報執行、郵件發送失敗 |
| Windows 應用程式日誌 | 事件檢視器 → Windows 日誌 → 應用程式 | 事件轉發、登入失敗、資源耗盡 |
**關鍵**:對齊三份日誌的**時間戳**,還原事故時間線。
若警報觸發但操作員未收到通知:
-- 手動測試郵件
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 啟用狀態**警報系統像消防栓:平時不起眼,火災時必須出水。定期演練是唯一保證。**