2011-04-14 98 views
4

我的應用程序同時連接到3個SQL服務器和5個數據庫。我需要在狀態欄上顯示狀態{running|stopped|not found}SQL Server狀態監視器

任何想法/代碼示例,我可以在這裏使用?此代碼不應影響應用程序的速度或SQL Server的開銷。

菩提

回答

1

我想你應使用WMI(使用ServiceController類(使用this構造函數)。基本上查詢sql server駐留的服務器並檢查其狀態。

下面的例子是假設您的應用程序是用C#:

ServiceController sc = new ServiceController("MSSQLSERVER", serverName); 
string status = sc.Status.ToString(); 
+0

那些SQL服務器沒有在我的機器上運行,它們來自本地網絡上的服務器,我認爲我們不能使用這個... – 2011-04-25 04:14:25

+0

是的,即使服務位於其他機器上,您也可以使用它。您必須在運行服務的計算機上擁有適當的權限。 – 2011-04-25 16:56:45

+0

您可以使用模擬或將權限授予您需要運行該應用程序的每個用戶。查看此頁面以獲取所需權限的信息:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sys_srv_permissions.mspx?mfr=true – 2011-04-25 17:01:19

1

「此代碼應該不會影響應用程序或開銷的速度 到SQL 服務器」

這是一個薛定諤的貓的場景:爲了瞭解當前狀態對於給定的遠程服務或進程,您必須將消息序列化到網絡上,等待響應,反序列化並對其執行操作。所有這些都需要所涉及的所有機器的一些工作和資源。

但是,該工作可能在調用方的後臺線程中完成,如果不經常調用,可能不會以任何可衡量的方式影響目標服務器。

您可以使用SMO (SQL Server Management Objects)連接到遠程服務器,並且可以通過SQL管理工具執行幾乎任何你可以做的任何事情,因爲他們也使用SMO來施展他們的魔法。這是一個非常簡單的API,可以在合適的人手中非常強大。

SMO確實要求您對您要監控的箱子擁有適當的權利。如果您沒有/沒有足夠的權限,您可能需要讓您友好的SQL amin團隊發佈一個簡單的數據源,以暴露您需要的一些數據。

HTH。

+0

我希望這是SQL 2008引入的,不幸的是我仍然使用SQL 2000. – 2011-04-18 06:09:20

1

在連接(驗證連接)或未能連接(驗證無連接)時,應用程序中會有一些開銷,但您可以通過非常快速地檢查來防止等待時間。

+0

任何想法/代碼顯示如何做到這一點? – 2011-04-18 06:09:51

+0

我會運行像SELECT COUNT(ID)FROM Contacts這樣的基本腳本。這將檢查與數據庫的連接,並且所有權限等都仍然可以。開銷會很低,並且可以通過不頻繁的輪詢/檢查進一步降低。 – 2011-04-21 14:51:01

0

我們用下面的SQL查詢來檢查status特定數據庫的

SELECT 'myDatabase status is:' AS Description, ISNULL((select state_desc FROM sys.databases WITH (NOLOCK) WHERE name ='myDatabase'),'Not Found') AS [DBStatus] 

這應該有非常小的開銷,尤其是當與類似背景或異步線程的最佳實踐配對

0

完全公開,我的Cotega

如果你有興趣在服務做到這一點的創始人,我們的服務允許SQL監測服務器運行時間和性能。此外,您可以設置數據庫不可用,性能降低,數據庫大小或用戶數問題等發生的通知。