データベース ミラーリングの使用
注 |
---|
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代わりに AlwaysOn 可用性グループを使用してください。 |
SQL Server 2005 で導入されたデータベース ミラーリングは、データベースの可用性とデータの冗長性を高めるためのソリューションです。 SQL Server Native Client では、データベース用に構成することにより、開発者がコードを記述したりそれ以外の操作を行わなくてもデータベース ミラーリングが暗黙にサポートされます。
データベースごとに実装されるデータベース ミラーリングは、SQL Server 実稼働データベースのコピーをスタンバイ サーバー上に保持します。 このサーバーは、データベース ミラーリング セッションの構成および状態に応じて、ホット スタンバイ サーバーかウォーム スタンバイ サーバーのいずれかになります。 ホット スタンバイ サーバーはコミット済みトランザクションが失われない高速フェールオーバーをサポートし、ウォーム スタンバイ サーバーはサービスの強制 (データ損失の可能性あり) をサポートします。
実稼働データベースはプリンシパル データベースと呼ばれ、スタンバイ コピーはミラー データベースと呼ばれます。 プリンシパル データベースおよびミラー データベースは、別個の SQL Server インスタンス (サーバー インスタンス) に配置する必要があります。また、可能な場合は別個のコンピューターに配置してください。
プリンシパル サーバーと呼ばれる実稼働サーバー インスタンスは、ミラー サーバーと呼ばれるスタンバイ サーバーと通信します。 プリンシパル サーバーとミラー サーバーは、データベース ミラーリング セッションの中でパートナーとして機能します。 プリンシパル サーバーに障害が発生した場合、ミラー サーバーはフェールオーバーと呼ばれるプロセスを介して、そのデータベースをプリンシパル データベースに変更できます。 たとえば、Partner_A と Partner_B がパートナー サーバーで、初期時点ではプリンシパル データベースがプリンシパル サーバーである Partner_A にあり、ミラー データベースがミラー サーバーである Partner_B にあるとします。 Partner_A がオフラインになった場合、Partner_B がフェールオーバーして現在のプリンシパル データベースになることができます。 Partner_A がミラー化セッションに再び参加すると、このサーバーがミラー サーバーになり、このサーバーのデータベースがミラー データベースになります。
代替データベース ミラーリング構成は、さまざまなレベルのパフォーマンスとデータの安全性を提供し、さまざまな形態のフェールオーバーをサポートします。 詳細については、「データベース ミラーリング (SQL Server)」を参照してください。
ミラー データベース名を指定するときには別名を使用できます。
注 |
---|
ミラー化されたデータベースへの最初の接続試行と再接続試行の詳細については、「データベース ミラーリング セッションへのクライアントの接続 (SQL Server)」を参照してください。 |
プログラミングの考慮事項
プリンシパル データベース サーバーに障害が発生した場合、クライアント アプリケーションの API 呼び出しの応答がエラーになり、データベースへの接続が失われたことが伝えられます。 このとき、データベースへのコミットされていない変更は反映されず、現在のトランザクションはロールバックされます。 その場合、アプリケーションは接続を閉じ (またはデータ ソース オブジェクトを解放し)、再度接続を開く必要があります。 再接続の結果、プリンパル サーバーの機能を引き継いだミラー データベースに自動的にリダイレクトされます。
接続を確立するときに、プリンシパル サーバーからクライアントに対し、フェールオーバーが行われるときに使用されるフェールオーバー パートナーの ID が送信されます。 プリンシパル サーバーで障害が発生した後で接続を確立すると、クライアント側でフェールオーバー パートナーの ID を把握できません。 このシナリオでクライアントが適切な処理を行うため、初期化プロパティおよび関連する接続文字列キーワードを使用して、クライアントが独自にフェールオーバー パートナーの ID を指定することができます。 クライアント属性が使用されるのは、このシナリオのみです。プリンシパル サーバーが利用できる場合、クライアント属性は使用されません。 クライアントが指定したフェールオーバー パートナー サーバーが、フェールオーバー パートナーとして機能しているサーバーを参照していない場合は、サーバーへの接続が拒否されます。 アプリケーションが構成の変更に対応できるようにするため、接続を確立した後で属性を調査することにより、実際のフェールオーバー パートナーの ID を特定できます。 パートナー情報をキャッシュして接続文字列を更新することを検討するか、最初の接続に失敗した場合の再接続の方法を検討することをお勧めします。
注 |
---|
この機能を DSN、接続文字列、または接続プロパティや接続属性で使用する場合は、接続で使用するデータベースを明示的に指定する必要があります。 指定しないと、SQL Server Native Client はパートナー データベースへのフェールオーバーを実行しません。 ミラー化はデータベースの機能です。 複数のデータベースを併用するアプリケーションでは、この機能を利用できない場合があります。 また、サーバー名は大文字小文字が区別されませんが、データベース名は区別されます。 したがって、大文字小文字の使い方を DSN と接続文字列で統一してください。 |
SQL Server Native Client OLE DB プロバイダー
SQL Server Native Client OLE DB プロバイダーは、接続属性および接続文字列の属性を使用してデータベース ミラーリングをサポートしています。 DBPROPSET_SQLSERVERDBINIT プロパティ セットには、SSPROP_INIT_FAILOVERPARTNER プロパティが追加されています。FailoverPartner キーワードは、DBPROP_INIT_PROVIDERSTRING の新しい接続文字列属性です。 詳細については、「SQL Server Native Client での接続文字列キーワードの使用」を参照してください。
プロバイダーを読み込んでいる間 (CoUninitialize が呼び出されるまで)、または SQL Server Native Client OLE DB プロバイダーの管理下にある、データ ソース オブジェクトなどのオブジェクトをアプリケーションから参照している間は、フェールオーバー キャッシュが保持されます。
SQL Server Native Client OLE DB プロバイダーによるデータベース ミラーリングのサポートの詳細については、「初期化プロパティと承認プロパティ」を参照してください。
SQL Server Native Client ODBC ドライバー
SQL Server Native Client ODBC ドライバーは、接続属性および接続文字列の属性を使用してデータベース ミラーリングをサポートしています。 SQLSetConnectAttr 関数および SQLGetConnectAttr 関数で使用する SQL_COPT_SS_FAILOVER_PARTNER 属性が追加され、Failover_Partner キーワードが新しい接続文字列属性として追加されている点に注意してください。
アプリケーションに環境ハンドルが少なくとも 1 つ割り当てられている限り、フェールオーバー キャッシュが保持されます。 反対に、最後の環境ハンドルの割り当てが解除されると、キャッシュが消失します。
注 |
---|
ODBC ドライバー マネージャーが拡張され、フェールオーバー サーバーの名前を指定できるようになりました。 |
関連項目
概念
データベース ミラーリング セッションへのクライアントの接続 (SQL Server)