注
この機能は、今後のバージョンの Microsoft SQL Server で削除される予定です。 新しい開発作業ではこの機能を使用しないでください。現在この機能を使用しているアプリケーションを変更することを計画してください。 代わりにAlways On可用性グループを使用します。
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 プロバイダーは、接続属性と接続文字列属性を使用したデータベース ミラーリングをサポートしています。 SSPROP_INIT_FAILOVERPARTNER プロパティが DBPROPSET_SQLSERVERDBINIT プロパティ セットに追加され、 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 Native Client の機能
データベース ミラーリング セッションへのクライアントの接続 (SQL Server)
データベース ミラーリング (SQL Server)