自動フェールオーバー

自動フェールオーバーは、ミラーリング監視サーバーを使用して高い安全性モードで実行されているデータベース ミラーリング セッション (自動フェールオーバーを伴う高い安全性モード) でのみサポートされます。自動フェールオーバーを伴う高い安全性モードでは、一度データベースが同期されると、プリンシパル データベースが使用できなくなった場合に自動フェールオーバーが行われます。自動フェールオーバーが発生すると、ミラー サーバーがプリンシパル サーバーの役割を引き継ぎ、ミラー サーバーのデータベースのコピーがプリンシパル データベースとしてオンラインになります。データベースが同期していることを要件とすることで、プリンシパル データベースでコミットされたすべてのトランザクションがミラー データベースでもコミットされるため、フェールオーバーの間のデータの損失を防ぐことができます。

自動フェールオーバーの信頼性を向上させるには、ミラー データベースとプリンシパル データベースを別のコンピュータに配置する必要があります。

自動フェールオーバーに必要な条件

自動フェールオーバーを行うには以下の条件を満たしている必要があります。

  • データベース ミラーリング セッションを高い安全性モードで実行し、ミラーリング監視サーバーを配置している。詳細については、「同期データベース ミラーリング (高い安全性モード)」を参照してください。

  • ミラー データベースが既に同期している。同期することで、ミラー サーバーに送信されたすべてのログが再実行用としてディスクに書き込まれます。

  • プリンシパル サーバーとその他のデータベース ミラーリング構成との通信が切断され、ミラー サーバーとミラーリング監視サーバーはクォーラムを保持している。ただし、すべてのサーバー インスタンスで通信が切断された場合、ミラーリング監視サーバーとミラー サーバーの通信が回復しても、自動フェールオーバーは行われません。

  • プリンシパル サーバーの障害がミラー サーバーによって検出される。

    ミラー サーバーによってプリンシパル サーバーの障害がどのように検出されるかは、ハードウェアに関する障害とソフトウェアに関する障害とで異なります。詳細については、「データベース ミラーリング中に発生する可能性のあるエラー」を参照してください。

自動フェールオーバーの動作

上記の条件を満たしている場合、以下の順序で自動フェールオーバーの動作が開始されます。

  1. プリンシパル サーバーがまだ実行中の場合は、プリンシパル データベースの状態が DISCONNECTED に変更され、プリンシパル データベースからすべてのクライアントが切断されます。

  2. プリンシパル サーバーが使用できなくなったことをミラーリング監視サーバーとミラー サーバーが登録します。

  3. 再実行キューで待機しているログがある場合は、ミラー サーバーがミラー データベースのロールフォワードを完了します。

    注意

    ログの適用に必要な時間は、システムの処理速度、最近の作業負荷、および再実行キューのログの量によって異なります。

  4. 以前のミラー データベースが新しいプリンシパル データベースとしてオンラインになると、復旧によりコミットされていないすべてのトランザクションをできるだけ迅速にロールバックすることでそのようなトランザクションがクリーンアップされます。これらのトランザクションはロックによって分離されます。

  5. 以前のプリンシパル サーバーがセッションに再度参加すると、フェールオーバー パートナーがプリンシパルの役割を所有していることを認識します。以前のプリンシパル サーバーはミラーの役割を引き継ぎ、サーバー内のデータベースをミラー データベースにします。この新しいミラー サーバーの新しいミラー データベースは、できるだけ迅速にプリンシパル データベースと同期が取られます。新しいミラー サーバーによってデータベースの再同期が完了すると、再度フェールオーバーが可能になりますが、今度は反対方向にフェールオーバーされることになります。

下図に、シングル インスタンスの自動フェールオーバーを示します。

自動フェールオーバー

最初、3 台のサーバーすべてが接続されています (セッションには完全なクォーラムがあります)。Partner_A がプリンシパル サーバーで、Partner_B がミラー サーバーです。Partner_A (Partner_A のプリンシパル データベース) が使用できなくなります。ミラーリング監視サーバーと Partner_B は、プリンシパルが使用できなくなったことを認識します。セッションのクォーラムは保持されます。Partner_B がプリンシパル サーバーになり、サーバー内のデータベースのコピーを新しいプリンシパル データベースとして使用可能にします。その後、Partner_A がセッションに再接続すると、Partner_B がプリンシパルの役割を所有していることが検出されます。そこで Partner_A がミラーの役割を引き継ぎます。

フェールオーバー後は、クライアントから現在のプリンシパル データベースに再接続する必要があります。詳細については、「ミラー化されたデータベースへのクライアント接続」を参照してください。

注意

Microsoft 分散トランザクション コーディネータを使用して準備したトランザクションのうち、フェールオーバーの発生時点ではコミットされていなかったトランザクションは、データベースのフェールオーバー後に中断したと見なされます。

SQL Server Management Studio を使用した自動フェールオーバーの無効化

自動フェールオーバーを無効にするには、[データベースのプロパティ][ミラーリング] ページを開き、次のいずれかのオプションを選択して動作モードを変更します。

動作モードを変更するには

Transact-SQL を使用した自動フェールオーバーの無効化

データベース ミラーリング セッションの任意の時点で、データベース所有者はミラーリング監視サーバーを無効にすることで、自動フェールオーバーを無効にできます。

ミラーリング監視サーバーを無効にするには