同期データベース ミラーリング (高い安全性モード)
トランザクションの安全性が FULL に設定されている場合、データベース ミラーリング セッションは高い安全性モードで実行され、初期同期フェーズの後に同期操作を行います。このトピックでは、同期操作を行うように構成されているデータベース ミラーリング セッションについて詳しく説明します。このトピックは、データベース ミラーリング操作の基本的な概念に詳しいユーザーを対象にしています。詳細については、「データベース ミラーリング セッション」を参照してください。
セッションの同期をとるには、ミラー サーバーがミラー データベースとプリンシパル データベースの同期をとる必要があります。セッションが開始されると、プリンシパル サーバーはアクティブなログをミラー サーバーに送信し始めます。ミラー サーバーは、できるだけ早く、受信したすべてのログ レコードをディスクに書き込みます。受信したログ レコードがすべてディスクに書き込まれると、データベースが同期されます。データベースの同期は、パートナーが互いに通信している限り保持されます。
メモ : |
---|
データベース ミラーリング セッションでの状態変更を監視するには、Database Mirroring State Change イベント クラスを使用します。詳細については、「Database Mirroring State Change イベント クラス」を参照してください。 |
同期が完了したら、プリンシパル データベースにコミットされるトランザクションはすべてミラー サーバーにもコミットされるので、データが確実に保護されます。これは、トランザクションのログがディスクに再実行用として書き込まれたことを伝えるメッセージをプリンシパル サーバーがミラー サーバーから受信するまで、プリンシパル データベースへのトランザクションのコミットを待機することで実現します。このメッセージを待機することで、トランザクションの待機時間が長くなることに注意してください。
同期に必要な時間は、主にセッションの開始時にミラー データベースがプリンシパル データベースからどれだけ遅れたか (プリンシパル サーバーから最初に受信したログ レコード数によって測定)、プリンシパル データベースのワークロード、およびミラー システムの速度に依存します。セッションが同期された後、再実行用として書き込まれたログのうち、ミラー データベースでまだ再実行されていないものは、再実行キューに残ります。詳細については、「データベース ミラーリング セッション」を参照してください。
ミラー データベースの同期がとられると、データベースの両方のコピーの状態が同期済みに変わります。
同期操作は次のように行われます。
- プリンシパル サーバーは、クライアントからトランザクションを受け取ると、そのトランザクションのログをトランザクション ログに書き込みます。
- プリンシパル サーバーはこのトランザクションをデータベースに書き込むと同時に、ログ レコードをミラー サーバーに送信します。プリンシパル サーバーは、ミラー サーバーから送信される確認を待ってから、トランザクションのコミットまたはロールバックのいずれかをクライアントに確認します。
- ミラー サーバーはログをディスクに再実行用として書き込み、確認をプリンシパル サーバーに返します。
- プリンシパル サーバーは、ミラー サーバーから確認を受け取ると、確認メッセージをクライアントに送信します。
高い安全性モードでは、2 か所間のデータの同期を要求することによってデータを保護します。コミットされているトランザクションはすべて、ミラー サーバー上のディスクに書き込まれることが保証されています。
自動フェールオーバーを伴わない高い安全性モード
自動フェールオーバーを伴わない高い安全性モードの構成を次の図に示します。この構成は、2 つのパートナーのみで構成されています。
パートナーが接続され、データベースが既に同期されている場合、手動フェールオーバーがサポートされます。ミラー サーバー インスタンスがダウンしても、プリンシパル サーバー インスタンスは影響を受けず、公開された状態で (つまり、データをミラー化せずに) 実行されます。プリンシパル サーバーが利用できなくなると、ミラーリングが中断されますが、サービスを手動でミラー サーバーに強制的に引き継ぐことができます (データを損失する可能性もあります)。詳細については、「強制的なサービスの起動 (データ損失の可能性あり)」を参照してください。
自動フェールオーバーを伴う高い安全性モード
自動フェールオーバーは、1 台のサーバーが機能しなくなった後もデータベースが動作し続けるようにすることで、高可用性を実現します。自動フェールオーバーでは、セッションに 3 番目のサーバー インスタンスとしてミラーリング監視サーバーが存在する必要があります。このサーバーは、第 3 のコンピュータに常駐するのが理想的です。自動フェールオーバーをサポートする高い安全性モードのセッションの構成を次の図に示します。
2 つのパートナーとは異なり、ミラーリング監視サーバーではデータベースの操作は行いません。ミラーリング監視サーバーは、プリンシパル サーバーが正常に動作しているかどうかを確認することにより、自動フェールオーバーをサポートするだけです。ミラー サーバーが自動フェールオーバーを開始するのは、ミラー サーバーとミラーリング監視サーバーの両方がプリンシパル サーバーから切断された後、そのまま相互に接続されている場合だけです。
ミラーリング監視サーバーが設定されると、セッションではクォーラムが必要になります。クォーラムとは、データベースを使用できるようにする、少なくとも 2 つのサーバー インスタンス間のリレーションシップのことです。詳細については、「クォーラム : データベースの可用性にミラーリング監視サーバーが与える影響」と「自動フェールオーバー」を参照してください。詳細については、「データベース ミラーリング監視サーバー」を参照してください。
自動フェールオーバーを行うには以下の条件を満たしている必要があります。
- データベースが既に同期されている。
- 3 つのサーバー インスタンスがすべて接続されているときに障害が発生し、ミラーリング監視サーバーとミラー サーバーが接続されたままになっている。
パートナーの損失による影響は次のとおりです。
- プリンシパル サーバーが使用できなくなると、上記の条件で自動フェールオーバーが発生します。ミラー サーバーはプリンシパル ロールに切り替わり、そのデータベースをプリンシパル データベースとして提供します。
- 上記の条件が満たされていない場合にプリンシパル サーバーが使用できなくなると、サービスの強制が可能になる場合があります (ただし、データ損失の可能性があります)。詳細については、「強制的なサービスの起動 (データ損失の可能性あり)」を参照してください。
- ミラー サーバーのみが使用できなくなっても、プリンシパル サーバーとミラーリング監視サーバーはそのままの状態を維持します。
セッションでそのミラーリング監視サーバーへの接続が失われた場合、クォーラムを確立するには両方のパートナーが必要です。いずれかのパートナーがクォーラムを失った場合、両方のパートナーがクォーラムを失い、クォーラムが再確立されるまでデータベースは使用できなくなります。このクォーラムの要件によって、ミラーリング監視サーバーが存在しない場合は、データベースが公開された状態 (つまり、ミラー化されていない状態) では実行されないことが保証されます。
メモ : |
---|
ミラーリング監視サーバーが長時間切断されたままであることが予想される場合は、使用できるようになるまでミラーリング監視サーバーをセッションから削除することをお勧めします。 |
参照
概念
データベース ミラーリング セッション
クォーラム : データベースの可用性にミラーリング監視サーバーが与える影響
Transact-SQL の設定とデータベース ミラーリングの動作モード