我正在尋找一種方式來輪詢不同的服務器,並檢查SQL服務器是否已啓動並正在運行。我正在用C#編寫我的代碼。我並不特別關心個別數據庫,只是SQL服務器正在運行並且響應。檢測SQL服務器是否正在運行
任何想法?
我正在尋找一種方式來輪詢不同的服務器,並檢查SQL服務器是否已啓動並正在運行。我正在用C#編寫我的代碼。我並不特別關心個別數據庫,只是SQL服務器正在運行並且響應。檢測SQL服務器是否正在運行
任何想法?
好吧,暴力解決方案是嘗試啓動與每個服務器上的數據庫的連接。這會告訴你它是否在運行,儘管你可能有超時問題。
更優雅(但更困難......並不總是這樣)解決方案是使用WMI連接到遠程機器,並確定SQL服務器進程是否正在運行。
使用TCPClient Class創建一個通用函數,該函數將TCP連接到給定的IP地址。
然後遍歷要測試的服務器列表,並嘗試如果需要特定的服務器,使用WMI打開1433端口
連接。如果你只是想所有可用的服務器:
我當然會文森特的答案去。只要確定你正在關閉並正確地配置tcp連接等。如果這是你所追求的,WMI對我來說似乎有些過火。
System.Data.Sql.SqlDataSourceEnumerator
將返回當前正在運行的所有SQL Server實例。
MSDN Link
SqlDataSourceEnumerator爲您提供所有實例,但它們不一定在運行。 對於本地SQL實例,可以使用ServiceController對象,命名空間System.ServiceProcess。服務名稱是來自SqlDataSourceEnumerator的「MSSQL $」和「InstanceName」的連接。設置ServiceController對象的ServiceName屬性,你可以檢查「Status」屬性 - Stopped,Running,Pended等。因此,你可以過濾「正在運行的」
ummm..just在蠻力解決方案上戳,說你有一個連接列表,在Framework 4中你可以想到foreach.parallel並等待得到的結果異步。仍然看到性能問題丹尼?我只是想看看並行的東西在哪裏有意義... – Perpetualcoder 2009-12-14 20:12:13
連接字符串的清單是準確的 – Perpetualcoder 2009-12-14 20:13:02
??也許我錯過了一些東西,但是我沒有看到你想要創造的點。 – TheSmurf 2009-12-16 03:19:20