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 オブジェクトで発生します。
クライアント アプリケーションが正常にプリンシパル データベースに接続し、クライアント上でキャッシュされたパートナー サーバーの名前をサーバーが返信します。
プリンシパル データベースが存在するサーバーで障害が発生したか、接続が中断された場合、接続とトランザクションの状態は失われます。クライアント アプリケーションは、プリンシパル データベースへの接続を再確立しようとして、失敗します。
次に、クライアント アプリケーションでは、パートナー サーバー上のミラー データベースへの接続を透過的に確立しようとします。この処理に成功すると、新しいプリンシパル データベースとなるミラー データベースに、接続がリダイレクトされます。
接続文字列でのフェールオーバー パートナーの指定
接続文字列でフェールオーバー パートナー サーバーの名前を指定すると、クライアント アプリケーションが最初に接続するときにプリンシパル データベースを使用できない場合、クライアントはフェールオーバー パートナーへの接続を透過的に試行します。
";Failover Partner=PartnerServerName"
接続文字列のフェールオーバー パートナー サーバーの名前を省略すると、クライアント アプリケーションが最初に接続するときにプリンシパル データベースが使用できない場合、SqlException が発生します。
SqlConnection が正常に開かれた場合、サーバーからフェールオーバー パートナーの名前が返され、接続文字列に指定されている値を置き換えます。
メモ : |
---|
データベース ミラーリング シナリオでは、接続文字列で初期カタログやデータベース名を明示的に指定する必要があります。クライアントが、初期カタログやデータベースが明示的に指定されていない接続に関するフェールオーバー情報を受信する場合は、このフェールオーバー情報はキャッシュされず、アプリケーションはプリンシパル サーバーでの障害発生時にフェールオーバーを試行しません。接続文字列にフェールオーバー パートナーの値が含まれていても、初期カタログまたはデータベースの値が含まれていない場合、InvalidArgumentException が発生します。 |
現在のサーバー名の取得
フェールオーバーの場合には、SqlConnection オブジェクトの DataSource プロパティを使って、現在の接続が実際に接続されているサーバーの名前を取得できます。次のコード フラグメントでは、アクティブなサーバーの名前を取得します。この場合、接続変数は開いている SqlConnection を参照することを前提としています。
フェールオーバー イベントが発生し、接続がミラー サーバーに切り替えられると、ミラー名を反映するために DataSource プロパティが更新されます。
Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;
SqlClient ミラーリングの動作
クライアントは、常に現在のプリンシパル サーバーに接続しようとします。接続に失敗した場合は、フェールオーバー パートナーに接続しようとします。ミラー データベースが既にパートナー サーバー上でプリンシパル ロールに切り替わっている場合、接続は正常に行われ、新しいプリンシパルとミラー間のマッピングがクライアントに送信されて AppDomain の呼び出しの有効期間の間キャッシュされます。このマッピングは永続ストレージには格納されないため、別の AppDomain 内またはプロセス内で次回の接続に使用することはできません。ただし、同一の AppDomain 内では次回の接続に使用できます。同一または別のコンピュータ上で実行されている、別の AppDomain またはプロセスには常に接続のプールがあり、これらの接続はリセットされません。このとき、プライマリ データベースがダウンし、各プロセスまたは AppDomain が失敗した場合、プールは自動的に消去されます。
メモ : |
---|
サーバーのミラーリング サポートは、データベースごとに構成されます。複数部分から成る名前を使用するか、現在のデータベースを変更することにより、プリンシパル/ミラー セットに含まれない他のデータベースに対してデータの操作が実行された場合、これらの他のデータベースへの変更は障害の発生時には反映されません。ミラー化されていないデータベース内でデータが変更された場合、エラーは発生しません。開発者は、このような操作の考えられる影響を評価する必要があります。 |
データベース ミラーリングに関するリソース
ミラーリングの構成、配置、および管理の概念に関するドキュメントや情報については、SQL Server オンライン ブックの次のリソースを参照してください。
リソース |
説明 |
---|---|
データベース ミラーリング (SQL Server 2008 オンライン ブック) |
SQL Server 2008 でのミラーリングの設定と構成方法について説明します。 |
データベース ミラーリング (SQL Server 2005 オンライン ブック) |
SQL Server 2005 でのミラーリングの設定と構成方法について説明します。 |