2012-04-13 74 views
2

我正在尋找一種在數據庫或日誌剩餘空間達到10%時發送警報的方法。SQL Server「可用空間」警報?

讓我先說這個問題,說我故意在問題中沒有包含單詞「file」。雖然我研究了這個問題,但似乎大多數人都將自己的數據庫設置爲自動增長,然後很難在文件系統級別管理其數據庫。在這裏有很多例子涉及如何發送磁盤空間警報。這不是我的問題!我的數據庫都設置爲固定大小的文件。這意味着文件在創建時或者數據庫需要擴展時都是從文件系統預先分配的。作爲一個策略問題,我不允許任何數據庫增長,不受控制,直到整個服務器被一個性能不佳的應用程序佔用。每個數據庫都在其預先分配的空間內進行管理,並根據需要手動增長以滿足不斷增長的需求。

這就是說,我正在尋找當數據庫「擴展空間」下降到10%以下時發送警報的最佳方式 - 例如,技術上我可能會設置一個警告和警報閾值。到目前爲止,我還沒有找到關於這個問題的任何內容,因爲大多數人似乎都固定在磁盤空間上,這使得這有點像在大海撈針中尋找針。

我希望SQL Server能夠提供簡單的警報機制,可以立即執行這樣一個簡單明瞭的事情,但它看起來像警報主要是爲了捕獲錯誤信息,這些信息有點遲本書 - 我期待更積極一點。

因此,當數據庫「剩餘空間」降到各種閾值以下時,再次發送警報。有沒有人做過或看到過它?

謝謝!

回答

3

是的。我已經做到了。

可以使用針對系統表的查詢設置計數器。一種可能性包括確定日誌或數據文件中的可用空間百分比。然後,可以創建一個SQL警報,通過電子郵件向操作員發送一條消息,指出在計數器上已達到特定閾值,例如數據庫文件中只剩下5%的空間。該解決方案需要幾個步驟,但可以使用現有的功能。

要確定文件名和空間信息,可以使用以下查詢。

SELECT name AS 'File Name' , 
physical_name AS 'Physical Name', 
size/128 AS 'Total Size in MB', 
size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS 'Available Space In MB', 
round((CAST(FILEPROPERTY(name, 'SpaceUsed') AS float)/size)* 100 ,2) AS 'Percentage Used', 
* 
FROM sys.database_files; 

以下是設置給定文件上免費百分比空間警報的步驟。

  1. 創建設置計數器值的過程。本示例設置計數器10號

    DECLARE @FreePercent int 
    
    SELECT @FreePercent = 100 - round((CAST(FILEPROPERTY(name, 'SpaceUsed') AS float)/size)* 100 ,2) 
    FROM sys.database_files 
    WHERE sys.database_files.name = 'NameOfYourLogOrDataFileHere'; 
    
    EXEC sp_user_counter10 @FreePercent 
    
  2. 創建計劃任務與違背上述程序

  3. 創建SQL代理警報,以便在執行時自由空間比例低於某一閾值(即5%)

  4. 配置數據庫郵件,測試它,並創建至少一個運營商

  5. 啓動SQL Server代理警報電子郵件(代理的屬性),並重新啓動代理