2012-03-13 10 views
1

システムの再起動後にデータベースクライアントがSQL Serverを起動して実行することを保証するには、サービスの依存関係では不十分です。彼らは、マスターデータベースへの接続を作成することができるかもしれませんが、特定のデータベースが(回復モードで)開かれているプロセスの中にあるかもしれませんし、それへの接続は、ある程度の期間、拒否されます。データベースクライアント:SQL Serverの再起動後にデータベースのアクティブ化を待つ方法

遅延の正確な持続時間は非常に可変で、システム上のデータベース数、リカバリモード、LDFファイルサイズ、または再起動前のトラフィックなどの要因によって異なります。

クライアントへの依存を処理するよく知られた方法は、スリープして再試行することです。しかし、このアプローチは、特にクライアントが技術や所有権の面で多様である場合や、この競合状態がごくまれにしか現れない場合には、きれいで信頼できるものではありません。

すべてのデータベースが開かれているか疑わしいとマークされるまで、SQL Serverサービスを「開始」状態に保つことによって、クライアントをサーバーの起動と同期させるより良い方法はありますか?

答えて

4

信頼できる接続の確立に成功しない限り、起動したと報告していないデータベースにアクセスしようとするWindowsサービスを作成します。基本的にこのサービスはエラーを返し、サービスマネージャはサービス設定に従ってサービスマネージャを実行しようとします。

これで、データベースが応答可能であることを保証する新しいサービスに依存することができます。

関連質問

更新

また、データベースが稼働しているかどうかを知るための非常にクリーンな方法については、以下の値をチェックすることです:

SELECT state_desc 
FROM sys.databases 
WHERE name = 'YourDatabase' 

「ONLINE」以外の文字列があれば、データベースはまだ準備されていません。 (存在する場合) http://msdn.microsoft.com/en-us/library/ms190442.aspx