問題
隨著SQL Server 2005版本的發布,數據庫鏡像技術已經成為了解決故障問題的非常流行的方法。但數據庫鏡像的一大問題就是failover(失效轉移)僅僅作用在發生故障的主庫上,當一個數據庫失效時,系統中的備用數據庫會立即接替它的位置,但是所有其他的數據庫依然保持在原服務器上發揮作用。這種技術的缺點就是在多數據庫系統中會不斷建立越來越多的應用程序,一旦主庫失效,備庫雖然可以繼續在原服務器上發揮作用,但是基於失效主庫所建立的應用程序也會隨之失效。當這種情況發生時,我們怎樣才能被通知並立即failover所有的數據庫呢?
專家解答
就像SQL Server的所有功能一樣,當數據庫鏡像功能失敗時,有一種方法能讓我們得到警告並檢測所發生的情況。遺憾的是,這種針對鏡像功能的事件警報機制並不想您所想象的那麼直接明了,但它仍然可以被實施。
對於數據庫鏡像功能來說,您可以選擇使用事件追蹤功能或設置SQL Server Alert(警報管理器)來檢測當數據庫鏡像狀態值改變時所發生的WMI (Windows Management Instrumentation,即windows管理規范)事件。在我們開始之前,您仍需做以下幾件事情:
准備步驟
首先必須要啟動備庫和msdb(目錄管理)數據庫的service broker功能。此項功能可以通過以下代碼來檢測:
SELECT name, is_broker_enabled
FROM sys.databases
如果service broker的值未被設為1,您可以為每一個數據庫設置如下命令來啟動此項功能:
ALTER DATABASE msdb SET ENABLE_BROKER
如果SQL Server Agent處於運行當中,這條命令將無法被執行,您需要先終止SQL Server Agent,接著運行上述命令,然後再重新啟動它。
最後,如果SQL Server Agent沒有處於運行狀態,您需要啟動此項功能。
創建警報管理器
其創建方法同其他警報管理器一樣,只是我們需要選擇WMI事件警報管理器(WMI event alert)類型。
首先展開SQL Server Agent的樹形目錄,右鍵點擊Alerts然後選擇New Alert
圖1:選擇New Alert
在New Alert(警報管理器)頁面,我們要把類型改為WMI event alert。您要注意的另外一點就是系統還需要Namespace一欄的信息,SQL Server系統已經根據您所使用的SQL Server版本默認選擇了正確的信息。
圖2:New Alert頁面