2008-08-22 15 views
6

異なるサーバーをポーリングし、SQLサーバーが起動していることを確認する方法を探しています。私は自分のコードをC#で書いています。私は個々のデータベースを特に気にせず、SQLサーバーが稼動しており、応答性が高いということだけです。SQLサーバーが実行されているかどうかを検出する

アイデア?

答えて

5

まあ、ブルートフォースの解決策は、各サーバー上のデータベースとの接続を開始しようとすることです。それはあなたがタイムアウトの問題を抱えているかもしれませんが、実行中かどうかを教えてくれます。

より洗練された(しかしより難しいのは、常にそうではありませんか?)ソリューションは、リモートマシンに接続してSQLサーバープロセスが実行されているかどうかを調べることです。

+0

ummm ..フレームワーク4では、foreach.parallelを考えて、結果の非同期化を待つことができます。まだperf問題を参照してくださいダニー?私はちょうど平行なものが意味を成すものを見ようとしています... – Perpetualcoder

+0

正確な接続文字列のリスト – Perpetualcoder

+0

??たぶん私は何かを逃したが、私はあなたがしようとしているポイントを見ていない。 – TheSmurf

2

TCPClient Classを使用して、TCPを特定のIPアドレスに接続する汎用関数を作成します。

は次にテストしたいサーバのリストを反復して、WMIを使用して、特定のサーバーが必要な場合はポート1433

2

への接続を開こう。あなただけのすべての利用可能なサーバーをしたい場合:

http://support.microsoft.com/kb/q287737/

+0

これは私の最終的な解決策でした。ありがとう! –

0

私は確かにヴィンセントの答えとなるだろう。ちょうどあなたが閉鎖していることと、TCP接続を適切に廃棄していることを絶対に確信させるようにしてください.WMIはそれがすべてあなたの後であれば、私には少し残忍なようです。

2

System.Data.Sql.SqlDataSourceEnumeratorは、現在実行中のSQL Serverのすべてのインスタンスを返します。
MSDN Link

+0

私はSQLDMOコードを使用したときと同じ結果を得ました.3のうち3が認識されました。 –

2

SqlDataSourceEnumeratorはすべてのインスタンスを提供しますが、必ずしも実行されているわけではありません。 SQLのローカルインスタンスの場合、ServiceControllerオブジェクトの名前空間System.ServiceProcessを使用できます。サービス名は、SqlDataSourceEnumeratorからの "MSSQL $"と "InstanceName"の連結です。 ServiceControllerオブジェクトのServiceNameプロパティを設定すると、 "Status"プロパティ--Stop、Running、Pendedなどを確認できます。したがって、実行中のものをフィルタリングできます。

関連する問題