このトピックでは、データベース ミラーリング セッションの同期および非同期操作モードについて説明します。
注
データベース ミラーリングの概要については、 データベース ミラーリング (SQL Server) に関するページを参照してください。
用語と定義
このセクションでは、このトピックの中心となる用語をいくつか紹介します。
高パフォーマンス モード
データベース ミラーリング セッションは非同期的に動作し、プリンシパル サーバーとミラー サーバーのみを使用します。 ロールの切り替えの唯一の形式は、強制サービスです (データ損失の可能性があります)。
高い安全性モード (High-safety mode)
データベース ミラーリング セッションは同期的に動作し、必要に応じて、主サーバー、ミラー サーバー、およびウィットネス(監視)サーバーを使用します。
トランザクションの安全性
データベース ミラーリング セッションが同期的に動作するか非同期的に動作するかを決定するミラーリング固有のデータベース プロパティ。 安全レベルには、FULL と OFF の 2 つがあります。
ミラーリング監視サーバー
高い安全性モードでのみ使用するために、ミラー サーバーが自動フェールオーバーを開始するかどうかを認識できるようにする SQL Server の省略可能なインスタンス。 2 つのフェールオーバー パートナーとは異なり、ウィットネスはデータベースにサービスを提供しません。 自動フェールオーバーのサポートは、ミラーリング監視サーバーの唯一の役割です。
非同期データベース ミラーリング (High-Performance モード)
このセクションでは、非同期データベース ミラーリングのしくみ、高パフォーマンス モードを使用することが適切な場合、およびプリンシパル サーバーが失敗した場合の応答方法について説明します。
注
SQL Server 2014 のほとんどのエディションでは、同期データベース ミラーリングのみがサポートされています ("Safety Full Only")。 データベース ミラーリングを完全にサポートするエディションについては、「 SQL Server 2014 の各エディションでサポートされる機能」の「高可用性 (AlwaysOn)」を参照してください。
トランザクションの安全性が OFF に設定されている場合、データベース ミラーリング セッションは非同期的に動作します。 非同期操作では、1 つの操作モードと高パフォーマンス モードのみがサポートされます。 このモードでは、高可用性を犠牲にしてパフォーマンスが向上します。 ハイ パフォーマンス モードでは、プリンシパル サーバーとミラー サーバーのみを使用します。 ミラー サーバーの問題がプリンシパル サーバーに影響することはありません。 プリンシパル サーバーが失われると、ミラー データベースは DISCONNECTED とマークされますが、ウォーム スタンバイとして使用できます。
高パフォーマンス モードでは、ロールの切り替えの 1 つの形式のみをサポートします。強制サービス (データ損失の可能性あり)、ミラー サーバーをウォーム スタンバイ サーバーとして使用します。 強制サービスは、プリンシパル サーバーの障害に対して考えられる応答の 1 つです。 データ損失が発生する可能性があるため、サービスをミラーに強制する前に、他の代替手段を検討する必要があります。 詳細については、このトピック で後述する「プリンシパルの障害への対応」を参照してください。
次の図は、高パフォーマンス モードを使用したセッションの構成を示しています。
高パフォーマンス モードでは、プリンシパル サーバーがトランザクションのログをミラー サーバーに送信するとすぐに、プリンシパル サーバーはミラー サーバーからの受信確認を待たずにクライアントに確認を送信します。 トランザクションは、ミラー サーバーがログをディスクに書き込むのを待たずにコミットします。 非同期操作により、プリンシパル サーバーはトランザクションの待機時間を最小限に抑えて実行できます。
ミラー サーバーは、プリンシパル サーバーによって送信されたログ レコードに対応しようとします。 ただし、ミラー データベースはプリンシパル データベースよりも多少遅れる可能性がありますが、通常はデータベース間のギャップは小さくなります。 ただし、プリンシパル サーバーが大きな作業負荷を受けている場合や、ミラー サーバーのシステムが過剰に読み込まれている場合は、ギャップが大きくなる可能性があります。
High-Performance モードが適切なタイミング
高パフォーマンス モードは、プリンシパル サーバーとミラー サーバーが大きな距離で区切られ、小さなエラーがプリンシパル サーバーに影響を与えるのを望まないディザスター リカバリー シナリオで役立ちます。
注
ログ配布はデータベース ミラーリングの補足となる可能性があり、非同期データベース ミラーリングの代わりに便利です。 ログ配布の利点については、「 高可用性ソリューション (SQL Server)」を参照してください。 データベース ミラーリングでログ配布を使用する方法については、「データベース ミラーリング とログ配布 (SQL Server)」を参照してください。
High-Performance モードにおける目撃者の影響
Transact-SQL を使用して高パフォーマンス モードを構成する場合は、SAFETY プロパティが OFF に設定されるたびに、WITNESS プロパティも OFF に設定することを強くお勧めします。 証人は高パフォーマンスモードと共存できますが、証人にはメリットがなく、リスクを伴います。
いずれかのパートナーがダウンしたときにミラーリング監視サーバーがセッションから切断されると、データベースは使用できなくなります。 これは、高パフォーマンス モードではミラーリング監視が必要ない場合でも、1 つが設定されている場合、セッションには 2 つ以上のサーバー インスタンスで構成されるクォーラムが必要になるためです。 セッションがクォーラムを失った場合、データベースにサービスを提供することはできません。
高パフォーマンス モード セッションでミラーリング監視サーバーが設定されている場合、クォーラムの適用は次のことを意味します。
ミラー サーバーが失われた場合、プリンシパル サーバーは監視サーバーに接続されている必要があります。 それ以外の場合、プリンシパル サーバーは、見届け人サーバーまたはミラー サーバーがセッションに戻るまで、データベースをオフラインにします。
プリンシパル サーバーが失われた場合、ミラー サーバーにサービスを強制するには、ミラー サーバーをミラーリング監視サーバーに接続する必要があります。
注
クォーラムの種類については、「クォーラム: ウィットネスがデータベースの可用性に与える影響 (データベース ミラーリング)」を参照してください。
プリンシパルの障害への対応
プリンシパルが失敗した場合、データベース所有者には次のようないくつかの選択肢があります。
主要なユーザーが再び利用可能になるまで、データベースは使用できません。
プリンシパル データベースとそのトランザクション ログがそのままである場合、この選択では、可用性を犠牲にしてコミットされたすべてのトランザクションが保持されます。
データベース ミラーリング セッションを停止し、データベースを手動で更新してから、新しいデータベース ミラーリング セッションを開始します。
プリンシパル データベースが失われたが、プリンシパル サーバーがまだ実行されている場合は、すぐにプリンシパル データベースのログの末尾のバックアップを試みます。 ログ末尾のバックアップが成功した場合は、ミラーリングを削除することをお勧めします。 ミラーリングを削除した後は、すべてのデータを保持する以前のミラー データベースにログを復元できます。
注
ログ末尾のバックアップが失敗し、プリンシパル サーバーの復旧を待つことができない場合は、セッション状態を維持する利点があるサービスを強制することを検討してください。
(データ損失の可能性がある) サービスをミラー サーバーに強制します。
強制サービスは厳密にはディザスター リカバリー方法であり、慎重に使用する必要があります。 サービスの強制は、プリンシパル サーバーがダウンしている場合、セッションが非同期セッション (トランザクション セーフティが OFF に設定されている)、セッションにウィットネスがない (WITNESS プロパティが OFF に設定されている) か、ウィットネスがミラー サーバーに接続されている (すなわち、クォーラムがある状態) 場合のみです。
サービスを強制すると、ミラー サーバーはプリンシパルの役割を引き受け、クライアントのデータベースのコピーを処理します。 サービスが強制されると、プリンシパルがまだミラー サーバーに送信されていないトランザクション ログはすべて失われます。 そのため、データ損失の可能性が許容され、データベースの即時可用性が重要な状況に強制サービスを制限する必要があります。 強制サービスのしくみと、その使用に関するベスト プラクティスについては、「 データベース ミラーリング セッション中のロールの切り替え (SQL Server)」を参照してください。
同期データベース ミラーリング (High-Safety モード)
このセクションでは、代替の高い安全性モード (自動フェールオーバーあり、自動フェールオーバーなし) など、同期データベース ミラーリングのしくみについて説明し、自動フェールオーバーにおけるミラーリング監視サーバーの役割に関する情報を示します。
トランザクションの安全性が FULL に設定されている場合、データベース ミラーリング セッションは高い安全性モードで実行され、初期同期フェーズ後に同期的に動作します。 このセクションでは、同期操作用に構成されたデータベース ミラーリング セッションの詳細について説明します。
セッションの同期操作を実現するには、ミラー サーバーがミラー データベースをプリンシパル データベースと同期する必要があります。 セッションが開始されると、プリンシパル サーバーはミラー サーバーへのアクティブ ログの送信を開始します。 ミラー サーバーは、すべての受信ログ レコードをできるだけ早くディスクに書き込みます。 受信したすべてのログ レコードがディスクに書き込まれるとすぐに、データベースが同期されます。 パートナーが通信を続ける限り、データベースは同期されたままになります。
注
データベース ミラーリング セッションの状態変更を監視するには、 データベース ミラーリング状態変更 イベント クラスを使用します。 詳細については、「 データベース ミラーリング状態変更イベント クラス」を参照してください。
同期が完了すると、プリンシパル データベースでコミットされたすべてのトランザクションもミラー サーバーでコミットされ、データの保護が保証されます。 これは、プリンシパル サーバーがミラー サーバーからトランザクションのログをディスクに書き込んだというメッセージを受信するまで、プリンシパル データベースでトランザクションをコミットするのを待機することによって実現されます。 このメッセージを待機すると、トランザクションの待機時間が長くなることに注意してください。
同期に必要な時間は、基本的に、セッションの開始時にミラー データベースがプリンシパル データベースの背後にいた距離 (プリンシパル サーバーから最初に受信したログ レコードの数で測定)、プリンシパル データベースの作業負荷、およびミラー システムの速度によって異なります。 セッションが同期された後、ミラー データベースで再実行されていない強化されたログは再実行キューに残ります。
ミラー データベースが同期されるとすぐに、データベースの両方のコピーの状態が SYNCHRONIZED に変わります。
同期操作は次のように行われます。
クライアントからトランザクションを受信すると、プリンシパル サーバーはトランザクションのログをトランザクション ログに書き込みます。
プリンシパル サーバーはトランザクションをデータベースに書き込み、同時にログ レコードをミラー サーバーに送信します。 プリンシパル サーバーは、ミラー サーバーからの受信確認を待機してから、トランザクションコミットまたはロールバックのどちらかをクライアントに確認します。
ミラー サーバーはログをディスクに書き込み、プリンシパル サーバーに受信確認を返します。
ミラー サーバーから受信確認を受信すると、プリンシパル サーバーは確認メッセージをクライアントに送信します。
高い安全性モードでは、データを 2 つの場所間で同期するように要求することで、データを保護します。 コミットされたすべてのトランザクションは、ミラー サーバー上のディスクに書き込まれることが保証されます。
自動フェールオーバーなしの High-Safety モード
次の図は、自動フェールオーバーなしの高い安全性モードの構成を示しています。 構成は、2 つのパートナーのみで構成されます。
パートナーが接続されていて、データベースが既に同期されている場合は、手動フェールオーバーがサポートされます。 ミラー サーバー インスタンスがダウンした場合、プリンシパル サーバー インスタンスは影響を受けず、公開されて実行されます (つまり、データをミラーリングしません)。 プリンシパル サーバーが失われた場合、ミラーは中断されますが、サービスはミラー サーバーに強制される可能性があります (データが失われる可能性があります)。 詳細については、「 データベース ミラーリング セッション中のロールの切り替え (SQL Server)」を参照してください。
High-Safety モード 自動フェールオーバー付き
自動フェールオーバーでは、1 台のサーバーが失われた後もデータベースが引き続き処理されるようにすることで、高可用性が実現されます。 自動フェールオーバーでは、セッションに3つ目のサーバー インスタンスとして、証人サーバーが必要です。この証人サーバーは、理想的には3台目のコンピューターに配置されるべきです。 次の図は、自動フェールオーバーをサポートする高い安全性モード セッションの構成を示しています。
2 つのパートナーとは異なり、証人はデータベースにサービスを提供しません。 ミラーリング監視サーバーは、プリンシパル サーバーが稼働していて機能しているかどうかを確認することで、自動フェールオーバーをサポートするだけです。 ミラーサーバーは、プリンシパルサーバーから両方が切断された後、ミラーと証人が互いに接続されたままである場合にのみ、自動フェールオーバーを開始します。
ウィットネスが設定されている場合、セッションにはデータベースを利用可能にするために、少なくとも 2 つのサーバー インスタンス間の クォーラム関係が必要です。 詳細については、「 データベース ミラーリング見張り役 と クォーラム: 見張り役がデータベースの可用性に与える影響 (データベース ミラーリング)」を参照してください。
自動フェールオーバーには、次の条件が必要です。
データベースは既に同期されています。
この障害は、3 つのサーバー インスタンスすべてが接続されており、監視サーバーとミラー サーバーが接続されたままで発生します。
パートナーの損失には、次の影響があります。
上記の条件下でプリンシパル サーバーが使用できなくなった場合は、自動フェールオーバーが発生します。 ミラー サーバーはプリンシパルの役割に切り替え、そのデータベースをプリンシパル データベースとして提供します。
これらの条件が満たされていないときにプリンシパル サーバーが使用できなくなった場合は、サービスを強制 (データ損失の可能性がある) 可能性があります。 詳細については、「 データベース ミラーリング セッション中のロールの切り替え (SQL Server)」を参照してください。
ミラー サーバーのみが使用できなくなった場合は、プリンシパルとミラーリング監視サーバーが続行されます。
セッションが証人を失った場合、クォーラムには両方のノードが必要です。 いずれかのパートナーがクォーラムを失うと、両方のパートナーがクォーラムを失い、クォーラムが再確立されるまでデータベースは使用できなくなります。 このクォーラム要件により、証人が不在の場合、データベースがミラーリングされていない状態で露出されることは決してありません。
注
ミラーリング監視サーバーが長時間切断されたままであると予想される場合は、ミラーリング監視サーバーが使用可能になるまで、セッションからミラーリング監視サーバーを削除することをお勧めします。
Transact-SQL の設定とデータベース ミラーリングの動作モード
このセクションでは、ALTER DATABASE の設定とミラー化されたデータベースとミラーリング監視の状態 (存在する場合) の観点から、データベース ミラーリング セッションについて説明します。 このセクションは、SQL Server Management Studio を使用するのではなく、主に Transact-SQL を使用してデータベース ミラーリングを管理するユーザーを対象としています。
ヒント
Transact-SQL を使用する代わりに、[データベースのプロパティ] ダイアログ ボックスの [ミラーリング] ページを使用して、オブジェクト エクスプローラーでセッションの動作モードを制御できます。 詳細については、「 Windows 認証を使用したデータベース ミラーリング セッションの確立 (SQL Server Management Studio)」を参照してください。
トランザクションの安全性と監視の状態が動作モードに与える影響
セッションの動作モードは、トランザクションの安全性設定と証人の状態の組み合わせによって決まります。 データベース所有者はいつでもトランザクションセーフティーレベルを変更でき、証人を追加または削除できます。
トランザクションの安全性
トランザクションの安全性は、データベース ミラーリング セッションが同期的に動作するか非同期的に動作するかを決定するミラーリング固有のデータベース プロパティです。 安全レベルには、FULL と OFF の 2 つがあります。
完全に安全
トランザクションの安全性が完全に確保されると、セッションは高い安全性モードで同期的に動作します。 証人が存在する場合、セッションは自動フェールオーバーをサポートします。
ALTER DATABASE ステートメントを使用してセッションを確立すると、セッションは SAFETY プロパティを FULL に設定して開始されます。つまり、セッションは高い安全性モードで開始されます。 セッションが始まった後に、証人を追加できます。
詳細については、このトピックの「 同期データベース ミラーリング (High-Safety モード)」を参照してください。
安全オフ
トランザクションの安全性を無効にすると、セッションは非同期的に高パフォーマンス モードで動作します。 SAFETY プロパティが OFF に設定されている場合は、WITNESS プロパティも OFF (既定値) に設定する必要があります。 高パフォーマンス モードでのミラーリング監視サーバーの影響については、このトピックで後述 する「ミラーリング監視サーバーの状態」を参照してください。 トランザクションの安全性をオフにして実行する方法の詳細については、このトピックの「 非同期データベース ミラーリング (High-Performance モード)」を参照してください。
データベースのトランザクションの安全性設定は、各パートナーについて sys.database_mirroring カタログ ビューの mirroring_safety_level 列と mirroring_safety_level_desc 列に記録されます。 詳細については、「 sys.database_mirroring (Transact-SQL)」を参照してください。
データベース所有者は、トランザクションの安全性レベルをいつでも変更できます。
証人の状態
証人が設定されている場合、クォーラムが必要となるため、証人の状態は常に重要です。
存在する場合、証人は 2 つの状態のいずれかになります。
証人がパートナーに接続されると、そのパートナーに対して CONNECTED 状態になり、そのパートナーとのクォーラムを持ちます。 この場合、いずれかのパートナーが使用できない場合でも、データベースを使用できるようになります。
証人の存在は確認できるものの、それがパートナーに接続されていない場合、その証人はそのパートナーとの関係上、UNKNOWN または DISCONNECTED 状態になります。 この場合、証人サーバーはそのパートナーとクォーラムを形成できず、パートナー同士が接続されていない場合、データベースが利用できなくなります。
クォーラムの詳細については、「クォーラム: ウィットネスがデータベースの可用性に与える影響(データベース ミラーリング)」を参照してください。
サーバー インスタンス上の各ミラーリング監視サーバーの状態は、mirroring_witness_state 列と mirroring_witness_state_desc 列の sys.database_mirroring カタログ ビューに記録されます。 詳細については、「 sys.database_mirroring (Transact-SQL)」を参照してください。
次の表は、セッションの動作モードがトランザクションの安全性設定とミラーリング監視サーバーの状態にどのように依存するかをまとめたものです。
| 動作モード | トランザクションの安全性 | 証人の状態 |
|---|---|---|
| 高パフォーマンス モード | オフ | NULL (証人なし)2 |
| 自動フェールオーバーなしの高い安全性モード | 満杯 | NULL (証人なし) |
| 高安全性モード(自動フェールオーバー1付き) | 満杯 | 接続済み |
1 証人が切断された場合は、証人サーバーのインスタンスが使用可能になるまで、WITNESS を OFF に設定することをお勧めします。
2 ミラーリング監視サーバーがハイ パフォーマンス モードにある場合、ミラーリング監視サーバーはセッションに参加しません。 ただし、データベースを使用できるようにするには、少なくとも 2 つのサーバー インスタンスを接続したままにする必要があります。 そのため、高パフォーマンス モード セッションでは WITNESS プロパティを OFF に設定しておくことをお勧めします。 詳細については、「クォーラム: 監視サーバーがデータベース可用性に与える影響(データベースミラーリング)」を参照してください。
証人の安全設定と状態の表示
データベースの安全性設定とミラーリング監視サーバーの状態を表示するには、 sys.database_mirroring カタログ ビューを使用します。 関連する列は次のとおりです。
| 要因 | 列 | 説明 |
|---|---|---|
| トランザクションの安全性 | mirroring_safety_level または mirroring_safety_level_desc | ミラー データベースの更新時のトランザクション セーフティ設定は次のいずれかです。 不明 オフ 完全 NULL= データベースがオンラインではありません。 |
| 証人は存在しますか? | ミラーリング証人名 | データベース ミラーリング仲介者のサーバー名、または NULL。仲介者が存在しないことを示します。 |
| 目撃者の状態 | mirroring_witness_state または mirroring_witness_state_desc | 特定のパートナーのデータベース内のミラーリング監視サーバーの状態: 不明 接続済み 切断 NULL = ミラーリング監視サーバーが存在しないか、データベースがオンラインではありません。 |
たとえば、プリンシパル サーバーまたはミラー サーバーで、次のように入力します。
SELECT mirroring_safety_level_desc, mirroring_witness_name, mirroring_witness_state_desc FROM sys.database_mirroring
このカタログ ビューの詳細については、「 sys.database_mirroring (Transact-SQL)」を参照してください。
プリンシパル サーバーの損失に関する動作に影響する要因
次の表は、プリンシパル サーバーの損失に対するミラーリング セッションの動作に対するトランザクション の安全性設定、データベースの状態、ミラーリング監視サーバーの状態の組み合わせの効果をまとめたものです。
| トランザクションの安全性 | ミラー データベースのミラーリング状態 | 目撃状態 | プリンシパルが失われた場合の動作 |
|---|---|---|---|
| 満杯 | シンクロナイズド | 接続済み | 自動フェールオーバーが発生します。 |
| 満杯 | シンクロナイズド | 切断 | ミラー サーバーが停止します。フェールオーバーを実行できず、データベースを使用できません。 |
| オフ | SUSPENDED または DISCONNECTED | NULL (ミラーリング監視サーバーなし) | サービスは、(データ損失の可能性がある) ミラー サーバーに強制できます。 |
| 満杯 | 同期中または中断中 | NULL (証人なし) | サービスは、(データ損失の可能性がある) ミラー サーバーに強制できます。 |
関連タスク
データベース ミラーリング監視サーバーを追加または置き換える方法 (SQL Server Management Studio)
Windows 認証を使用してデータベース ミラーリング セッションを確立する (SQL Server Management Studio)