2016-07-21 36 views
0

我需要找出一個給定的SQL Server實例,它的實例名稱是否已經聚集,而不實際連接它並運行查詢。如何判斷一個SQL Server是否被羣集,而不與它進行交互,最好通過註冊表?

選項:

  1. SqlDataSourceEnumerator.Instance.GetDataSources():即使它的工作原理,它是極其緩慢。還有,它並不總是工作(返回空枚舉??)
  2. 註冊表 - 我敢肯定,那裏的信息,但不知道在哪裏...
  3. 還沒有嘗試WMI作爲我'肯定有一個簡單的解決方案(如註冊表...)

回答

1

TSQL:

SELECT 'IsClustered', SERVERPROPERTY('IsClustered') 

PowerShell的:

$s = Get-WmiObject -Class Win32_SystemServices -ComputerName $server 
if ($s | select PartComponent | where {$_ -like "*ClusSvc*"}) { Write-Output "$server is Clustered" } 
else { Write-Output "$server is Not clustered" } 

參考ence http://www.sqlservercentral.com/Forums/Topic1182082-1351-1.aspx

有些註冊表鍵可以查看https://www.mssqltips.com/sqlservertip/3440/registry-check-pointing-in-a-windows-cluster-to-bring-sql-server-online/瞭解詳情。

但TSQL和PowerShell比遠程註冊表調用快得多。如果可以與實例建立ADO.NET連接,則TSQL方法是迄今爲止最快的。

+0

WMI它然後...只需將其移植到C#。我會嘗試一下.. – Tar

+0

轉到ADO.NET/TSQL如果你能我只是基準測試,這是最快的方法。如果有幫助,我已經添加了一個指向羣集的註冊表項的鏈接,但遠程註冊表調用會更慢。 – DalSoft

+0

這個SO帖子應該讓你用WMI/C#的大部分方式http://stackoverflow.com/questions/2192544/programmatically-getting-sql-cluster-virtual-name – DalSoft

相關問題