2011-11-04 93 views
0

我已經一個數據庫與高安全性模式一面鏡子(使用見證服務器的時刻,但刨去帶他出去),這個數據庫將用於一個SQL實例的C#程序狀態存儲由ac#程序收集的數據。如何知道

我想知道我可以在我的程序檢查狀態的所有SQL實例,並引起/強制手動故障轉移。

有沒有任何C#API來幫助我呢?

信息: IM使用SQL Server 2008

編輯:我知道我可以查詢sys.database_mirroring但對於這一點,我需要主體數據庫起來,乳寧,我想聯繫每個SQL實例和檢查他們的狀態。

回答

0

張望了一下打後,我發現這個解決方案(我不是,如果這是一個妥善的解決辦法,所以發表評論PLZ)

using Microsoft.SqlServer.Management.Smo.Wmi; 

ManagedComputer mc = new ManagedComputer("localhost"); 
foreach (Service svc in mc.Services) { 
    if (svc.Name == "MSSQL$SQLEXPRESS"){ 
     textSTW.Text = svc.ServiceState.ToString(); 
    } 
    if (svc.Name == "MSSQL$TESTSERVER"){ 
     textST1.Text = svc.ServiceState.ToString(); 
    } 
    if (svc.Name == "MSSQL$TESTSERVER3") { 
     textST2.Text = svc.ServiceState.ToString(); 
    } 
} 

這樣我只是在尋找服務的狀態(Running/Stoped),速度更快,我錯過了什麼?

+0

我發現解決方案的限制...它只適用於本地實例...對於遠程實例,我們需要做其他事情來訪問服務。 – RagnaRock

2

使用SQL Server Management Objects (SMO)

SQL Server Management Objects(SMO)是一組對象,用於編寫管理Microsoft SQL Server的所有方面。 SQL Server複製管理對象(RMO)是封裝SQL Server複製管理的對象的集合。

我之前在託管應用程序中使用了SMO,


要找出一個實例的狀態,使用Server對象 - 是有StateStatus性能。

+0

由於某種原因,狀態始終是「現有」和狀態「離線」 ,我不能看的狀態,如果SQL Server實例實際上是下降的,因爲它會拋出異常。 (我不會介意這種行爲...但它需要大約5秒鐘而不是立即執行) 有關爲什麼會發生這種情況的任何想法?或者如果一臺服務器停機或無法正常工作,我該如何看待? – RagnaRock

+0

@RagnaRock - 按理說,如果SMO無法連接到它將拋出的實例。 – Oded

+0

但有沒有更快的方法來檢測服務器是否關閉?等待5秒鐘失敗,對我來說似乎太長了。 一種特殊的方法來檢測這種錯誤或... – RagnaRock