SQL Server Native Client でのデータベース ミラーリングの使用
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Note
この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに Always On 可用性グループ を使用してください
重要
SQL Server Native Client (SNAC) は同梱されていません。
- SQL Server 2022 (16.x) 以降のバージョン
- SQL Server Management Studio 19 以降のバージョン
SQL Server Native Client (SQLNCLI または SQLNCLI11) と従来の Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。
新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。
SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。
SQL Server 2005 (9.x) で導入されたデータベース ミラーリングは、データベースの可用性とデータの冗長性を高めるためのソリューションです。 SQL Server Native Client ではデータベース ミラーリングが暗黙的にサポートされるため、開発者は、データベース用に構成された後にコードを記述したり、他のアクションを実行したりする必要はありません。
データベース ミラーリングは、データベースごとに実装され、スタンバイ サーバー上に SQL Server 運用データベースのコピーを保持します。 このサーバーは、データベース ミラーリング セッションの構成および状態に応じて、ホット スタンバイ サーバーかウォーム スタンバイ サーバーのいずれかになります。 ホット スタンバイ サーバーはコミット済みトランザクションが失われない高速フェールオーバーをサポートし、ウォーム スタンバイ サーバーはサービスの強制 (データ損失の可能性あり) をサポートします。
運用データベースはプリンシパル データベースと呼ばれ、スタンバイ コピーはミラー データベースと呼ばれます。 プリンシパル データベースおよびミラー データベースは、別個の SQL Server インスタンス (サーバー インスタンス) に配置する必要があります。また、可能な場合は別個のコンピューターに配置してください。
プリンシパル サーバーと呼ばれる実稼働サーバー インスタンスは、ミラー サーバーと呼ばれるスタンバイ サーバーと通信します。 プリンシパル サーバーとミラー サーバーは、データベース ミラーリング セッションの中でパートナーとして機能します。 プリンシパル サーバーで障害が発生した場合、ミラー サーバーはフェールオーバーと呼ばれる処理を通じて、ミラー サーバーのデータベースをプリンシパル データベースにできます。 たとえば、Partner_A と Partner_B がパートナー サーバーで、初期時点ではプリンシパル データベースがプリンシパル サーバーである Partner_A にあり、ミラー データベースがミラー サーバーである Partner_B にあるとします。 Partner_A がオフラインになった場合、Partner_B がフェールオーバーして現在のプリンシパル データベースになることができます。 Partner_A がミラー化セッションに再び参加すると、このサーバーがミラー サーバーになり、このサーバーのデータベースがミラー データベースになります。
代替データベース ミラーリング構成は、さまざまなレベルのパフォーマンスとデータの安全性を提供し、さまざまな形態のフェールオーバーをサポートします。 詳細については、「データベース ミラーリング (SQL Server)」を参照してください。
ミラー データベース名を指定するときには別名を使用できます。
Note
ミラー化されたデータベースへの最初の接続試行と再接続試行の詳細については、「データベース ミラーリング セッションへのクライアントの接続 (SQL Server)」を参照してください。
プログラミングの考慮事項
プリンシパル データベース サーバーに障害が発生した場合、クライアント アプリケーションの API 呼び出しの応答がエラーになり、データベースへの接続が失われたことが伝えられます。 このとき、データベースへのコミットされていない変更は反映されず、現在のトランザクションはロールバックされます。 その場合、アプリケーションは接続を閉じ (またはデータ ソース オブジェクトを解放し)、再度接続を開く必要があります。 再接続の結果、プリンパル サーバーの機能を引き継いだミラー データベースに自動的にリダイレクトされます。
接続を確立するときに、プリンシパル サーバーからクライアントに対し、フェールオーバーが行われるときに使用されるフェールオーバー パートナーの ID が送信されます。 プリンシパル サーバーで障害が発生した後で接続を確立すると、クライアント側でフェールオーバー パートナーの ID を把握できません。 このシナリオでクライアントが適切な処理を行うため、初期化プロパティおよび関連する接続文字列キーワードを使用して、クライアントが独自にフェールオーバー パートナーの ID を指定することができます。 クライアント属性が使用されるのは、このシナリオのみです。プリンシパル サーバーが利用できる場合、クライアント属性は使用されません。 クライアントが指定したフェールオーバー パートナー サーバーが、フェールオーバー パートナーとして機能しているサーバーを参照していない場合は、サーバーへの接続が拒否されます。 アプリケーションが構成の変更に対応できるようにするため、接続を確立した後で属性を調査することにより、実際のフェールオーバー パートナーの ID を特定できます。 パートナー情報をキャッシュして接続文字列を更新することを検討するか、最初の接続に失敗した場合の再接続の方法を検討することをお勧めします。
Note
この機能を 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 つ割り当てられている限り、フェールオーバー キャッシュが保持されます。 反対に、最後の環境ハンドルの割り当てが解除されると、キャッシュが消失します。
Note
ODBC ドライバー マネージャーが拡張され、フェールオーバー サーバーの名前を指定できるようになりました。
参照
SQL Server Native Client の機能
データベース ミラーリング セッションへのクライアントの接続 (SQL Server)
データベース ミラーリング (SQL Server)