次の方法で共有


SQL Server のデータベース ミラーリング (ADO.NET)

更新 : November 2007

SQL Server のデータベース ミラーリング機能を使用すると、スタンバイ サーバー上に SQL Server 2005 データベースのコピー、つまりミラーを保持できます。ミラーリングは、常にデータのコピーが 2 つ別々に存在することを保証し、高可用性とデータの完全な冗長性をもたらします。.NET Data Provider for SQL Server は、データベース ミラーリングの暗黙的なサポートを提供するので、SQL Server 2005 または SQL Server 2008 データベース用に構成されていれば、開発者が何らかの処理を行ったり、コードを作成したりする必要はありません。さらに、SqlConnection オブジェクトは、ConnectionString 内のフェールオーバー パートナー サーバーの名前を指定できる明示的な接続モードをサポートします。

次の簡略化された一連のイベントは、ミラーリング用に構成されているデータベースを対象にする SqlConnection オブジェクトで発生します。

  1. クライアント アプリケーションが正常にプリンシパル データベースに接続し、クライアント上でキャッシュされたパートナー サーバーの名前をサーバーが返信します。

  2. プリンシパル データベースが存在するサーバーで障害が発生したか、接続が中断された場合、接続とトランザクションの状態は失われます。クライアント アプリケーションは、プリンシパル データベースへの接続を再確立しようとして、失敗します。

  3. 次に、クライアント アプリケーションでは、パートナー サーバー上のミラー データベースへの接続を透過的に確立しようとします。この処理に成功すると、新しいプリンシパル データベースとなるミラー データベースに、接続がリダイレクトされます。

接続文字列でのフェールオーバー パートナーの指定

接続文字列でフェールオーバー パートナー サーバーの名前を指定すると、クライアント アプリケーションが最初に接続するときにプリンシパル データベースを使用できない場合、クライアントはフェールオーバー パートナーへの接続を透過的に試行します。

";Failover Partner=PartnerServerName"

接続文字列のフェールオーバー パートナー サーバーの名前を省略すると、クライアント アプリケーションが最初に接続するときにプリンシパル データベースが使用できない場合、SqlException が発生します。

SqlConnection が正常に開かれた場合、サーバーからフェールオーバー パートナーの名前が返され、接続文字列に指定されている値を置き換えます。

5h52hef8.alert_note(ja-jp,VS.90).gifメモ :

データベース ミラーリング シナリオでは、接続文字列で初期カタログやデータベース名を明示的に指定する必要があります。クライアントが、初期カタログやデータベースが明示的に指定されていない接続に関するフェールオーバー情報を受信する場合は、このフェールオーバー情報はキャッシュされず、アプリケーションはプリンシパル サーバーでの障害発生時にフェールオーバーを試行しません。接続文字列にフェールオーバー パートナーの値が含まれていても、初期カタログまたはデータベースの値が含まれていない場合、InvalidArgumentException が発生します。

現在のサーバー名の取得

フェールオーバーの場合には、SqlConnection オブジェクトの DataSource プロパティを使って、現在の接続が実際に接続されているサーバーの名前を取得できます。次のコード フラグメントでは、アクティブなサーバーの名前を取得します。この場合、接続変数は開いている SqlConnection を参照することを前提としています。

フェールオーバー イベントが発生し、接続がミラー サーバーに切り替えられると、ミラー名を反映するために DataSource プロパティが更新されます。

Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;

SqlClient ミラーリングの動作

クライアントは、常に現在のプリンシパル サーバーに接続しようとします。接続に失敗した場合は、フェールオーバー パートナーに接続しようとします。ミラー データベースが既にパートナー サーバー上でプリンシパル ロールに切り替わっている場合、接続は正常に行われ、新しいプリンシパルとミラー間のマッピングがクライアントに送信されて AppDomain の呼び出しの有効期間の間キャッシュされます。このマッピングは永続ストレージには格納されないため、別の AppDomain 内またはプロセス内で次回の接続に使用することはできません。ただし、同一の AppDomain 内では次回の接続に使用できます。同一または別のコンピュータ上で実行されている、別の AppDomain またはプロセスには常に接続のプールがあり、これらの接続はリセットされません。このとき、プライマリ データベースがダウンし、各プロセスまたは AppDomain が失敗した場合、プールは自動的に消去されます。

5h52hef8.alert_note(ja-jp,VS.90).gifメモ :

サーバーのミラーリング サポートは、データベースごとに構成されます。複数部分から成る名前を使用するか、現在のデータベースを変更することにより、プリンシパル/ミラー セットに含まれない他のデータベースに対してデータの操作が実行された場合、これらの他のデータベースへの変更は障害の発生時には反映されません。ミラー化されていないデータベース内でデータが変更された場合、エラーは発生しません。開発者は、このような操作の考えられる影響を評価する必要があります。

データベース ミラーリングに関するリソース

ミラーリングの構成、配置、および管理の概念に関するドキュメントや情報については、SQL Server オンライン ブックの次のリソースを参照してください。

リソース

説明

データベース ミラーリング (SQL Server 2008 オンライン ブック)

SQL Server 2008 でのミラーリングの設定と構成方法について説明します。

データベース ミラーリング (SQL Server 2005 オンライン ブック)

SQL Server 2005 でのミラーリングの設定と構成方法について説明します。