管理多台資料庫伺服器時,每日手動檢查磁碟空間不僅耗時,更容易因疏忽導致服務中斷。本文分享三種自動化監控方案,透過排程作業呼叫預存程序,當剩餘空間低於閾值時自動發送 HTML 格式告警郵件給 DBA,並附上完整磁碟容量報表,協助儲存規劃。
核心機制: 利用 xp_fixeddrives 取得可用空間,再透過 Scripting.FileSystemObject COM 物件讀取總容量。因安全性考量,預存程序會動態啟用/停用 Ole Automation Procedures 選項。
適用場景: 內網環境、允許暫時開啟 OLE 元件的伺服器。
-- 關鍵邏輯片段 EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE; -- ... 建立 FileSystemObject、遍歷磁碟取得 TotalSize ... EXEC sp_configure 'Ole Automation Procedures', 0; RECONFIGURE; EXEC sp_configure 'show advanced options', 0; RECONFIGURE;
告警分級: 剩餘比例 10~20% 為級別 3、5~10% 為級別 4、<5% 為級別 5,郵件主旨與標題自動帶入等級。
核心機制: 透過 xp_cmdshell 執行 wmic LOGICALDISK get name,size 取得總容量,再與 xp_fixeddrives 的可用空間配對。同樣採動態開啟/關閉 xp_cmdshell 降低風險。
注意事項: 需具備足夠權限執行 WMIC,且 xp_cmdshell 屬高風險功能,建議僅在受控環境使用。
核心機制: 僅使用 xp_fixeddrives 取得可用空間(MB),無法取得總容量,因此改以「單一磁碟剩餘空間低於指定 GB 數」觸發告警。
優缺點: 最安全、相容性最好,但無法計算使用率,適合無法開啟進階選項的嚴格環境。
master 資料庫建立預存程序。EXEC sp_diskcapacity_alert1 15 表示 15% 閾值)。@profile_name)與收件者正確。三種方案各有取捨:方案一資訊最完整但需 OLE;方案二同樣完整但需 xp_cmdshell;方案三最安全但資訊較少。建議優先評估方案一,若安全性政策禁止則退而求其次。若有更優雅的方案(如 PowerShell + SQL Agent、監控軟體整合),歡迎交流分享。