SQL Server 2005 クライアント側のリダイレクト

http://technet.microsoft.com/ja-jp/library/cc917680.aspx

SQL Server 2005 では、ADO.NET または SQL Native Client を使ってミラーリングされたデータベースに接続する場合に、データベース ミラーリング フェールオーバーが発生したときのドライバの自動リダイレクト機能をアプリケーションから利用することができます。接続文字列の中に最初のプリンシパル サーバーとデータベース、およびオプションでフェールオーバー パートナー サーバーを指定する必要があります。接続文字列のすべてのキーワードの詳細については、「SQL Native Client での接続文字列キーワードの使用」を参照してください。

接続文字列の作成方法は複数ありますが、ここでは、サーバー A をプリンシパル サーバーとして、サーバー B をミラー サーバーとして、AdventureWorks をデータベース名として指定する場合の例を示します。

"Data Source=A;Failover Partner=B;Initial Catalog=AdventureWorks;Integrated Security=True;"

接続文字列内のフェールオーバー パートナーは、最初のプリンシパル サーバーへの接続が失敗した場合の代替サーバー名として使用されます。最初のプリンシパル サーバーへの接続が成功した場合は、フェールオーバー パートナー名は使用されませんが、ドライバがクライアント側のキャッシュ上のプリンシパル サーバーからフェールオーバー パートナー名を検索して保存します。

クライアントがプリンシパル サーバーとの接続に成功して、データベース ミラーリング フェールオーバー (自動、手動、または強制サービス) が発生したと仮定します。次に、アプリケーションがその接続を使用するときに、ADO.NET ドライバまたは SQL Native Client ドライバが、古いプリンシパル サーバーへの接続が失敗したことを検出して、自動的にフェールオーバー パートナー名を指定して新しいプリンシパル サーバーへの接続を再実行します。この接続が成功し、新しいプリンシパル サーバーによって指定されたデータベース ミラーリング セッション用の新しいミラー サーバーが存在する場合は、ドライバが新しいパートナー フェールオーバー サーバー名を検索してクライアント キャッシュに格納します。クライアントが代替サーバーに接続できない場合は、代わりにドライバがログイン タイムアウト期間が切れるまで、各サーバーに接続しようとします。

ADO.NET ドライバと SQL Native Client ドライバに組み込まれているデータベース ミラーリング サポートを使用する重要なメリットは、データベース ミラーリング フェールオーバーを処理するために、アプリケーションをコーディングし直したり、アプリケーションに特別なコードを追加したりする必要がないことです。

ADO.NET または SQL Native Client の自動リダイレクションを使わなくても、別の技法を使ってアプリケーションのフェールオーバーを実現できます。たとえば、ネットワーク負荷分散を使用すると、クライアントをバーチャル サーバー名に接続するだけで、あるサーバーから別のサーバーへ接続を手動でリダイレクトすることができます。また、独自のリダイレクション コードを作成して、そのロジックを試すこともできます。

ただし、データベース ミラーリングによってクライアントのリダイレクションを調整するこれらの技法のすべてには、重要な制限事項があります。データベース ミラーリングは、サーバー レベルではなくデータベース レベルでのみ発生します。アプリケーションから、1 台のサーバー上の複数のデータベースにクエリを実行する場合、または、複数のオブジェクト名を使って複数のデータベースにクエリを実行する場合は注意が必要です。1 台のサーバー上に複数のデータベースが存在し、それらが 1 台のスタンバイ サーバーにミラーリングされている場合は、複数のデータベースのうちの 1 つしかスタンバイ サーバーにフェールオーバーすることができません。このような場合は、クエリを実行するデータベースごとに接続を分ける必要があります。そうしなければ、1 つのデータベースだけがプリンシパルで、残りのデータベースがすべてミラーのスタンバイ サーバー上で、データベースを横断するクエリを実行することになります。