松本美穂と松本崇博が執筆した SQL Server 2012 自習書シリーズの「新機能編 No.2 AlwaysOn による可用性の向上」の HTML 版です。 日本マイクロソフトさんの Web サイトで Word または PDF 形式でダウンロードできますが、今回、HTML 版として公開する許可をいただきましたので、ここに掲載いたします。[2014年12月26日]
セカンダリが非同期モードの場合に手動フェールオーバーを実行するには、次の 2つの方法があります。
1.非同期モードを同期モードへ変更してから手動フェールオーバーを実行する
2.FORCE_FAILOVER_ALLOW_DATA_LOSS を指定して強制フェールオーバーを実行する。ただし、役割を元に戻すには RESUME を指定したデータベース再開がそれぞれのサーバー上で必要になる
非同期モードを同期モードへ変更する場合は、次のように[可用性レプリカ]フォルダー内のセカンダリを右クリックして、[プロパティ]をクリックし、[可用性モード]を[同期コミット]へ変更するだけです。ただし、この手順はプライマリ(SERVER1)へ接続して、プライマリ上から実行することに注意してください。
SQL ステートメントを利用して、非同期モードを同期モードへ変更する場合は、次のように ALTER AVAILABILITY GROUP ステートメントを実行します。
AG1 は 可用性グループ 名、SERVER3 は同期モードを変更したいセカンダリの名前、AVAILABILITY_MODE で SYNCHRONOUS_COMMIT と指定することで同期モードへ変更することができます。非同期モードへ戻したい場合は、ASYNCHRONOUS_COMMIT と指定します。
同期モードへ変更した後は、前の Step で試した SERVER2 と同じ状態になるので、手動でのフェールオーバーを全く同じように試すことができます。試した後は、非同期モードへ戻すようにします。
次に、非同期モードの場合の手動フェールオーバーの方法の 2つ目を説明します。この方法では、FORCE_FAILOVER_ALLOW_DATA_LOSS を指定した強制フェールオーバーを実行するのですが、実行後の復旧手順(役割を元に戻す手順)が少し複雑になります。しかし、この手順は、実際に障害が発生した場合の復旧手順とほとんど同じなので覚えておくことをお勧めします。
それでは、これも試してみましょう。
1.まずは、SERVER3 が非同期モードへ設定されていることを確認します。
2.次に、SERVER3 へ接続して、前の Step ど同様の手動フェールオーバーを実行してみます。
結果はエラーとなり、非同期モードでは、手動フェールオーバーが実行できないことを確認できます。
3.次に、FORCE_FAILOVER_ALLOW_DATA_LOSS を指定して、フェールオーバーを実行します(このオプションを指定したフェールオーバーは "強制フェールオーバー" と呼ばれます)。
今度は正常に終了します(約10秒くらいで完了します)。Step 2 の冒頭で説明したように、非同期モードでは、データを失う可能性がある(同期がとれていない可能性がある)ので、ALLOW_DATA_LOSS(データ損失を受け入れ)、FORCE(強制的に)FAILOVER を実行する、というオプションになっています。データベース ミラーリング機能で非同期モードを利用したことがある方にとってはお馴染みのオプションです。
強制フェールオーバーが完了した後は、オブジェクト エクスプローラーを最新の情報に更新して、SERVER3 がプライマリに変更されていることを確認します。
4.次に、SERVER3 またはリスナー(AG1_Listener)へ接続して、INSERT ステートメントを実行して、データを 1件追加してみましょう。
正しくデータを追加できることから、SERVER3 がプライマリとして正常に動作していることを確認できます。
5.次に、フェールオーバー クラスター マネージャーを起動して、リソースの所有者がSERVER3 へ変更されていることを確認しておきましょう。
6.次に、Visual Studio 2010 で作成した Windows アプリケーションを実行して、正しく結果が取得できることを確認します。
7.次に、オブジェクト エクスプローラーで[可用性レプリカ]フォルダーをクリックして、[オブジェクト エクスプローラーの詳細]を表示します。
ツールバーの[最新の情報に更新]ボタンをクリックすると、新しいセカンダリとなった SERVER1 や SERVER2 の[同期状態]が「同期されていません」と表示されることを確認できます。このように表示される場合は、その名のとおり、同期がとれいない状態なので、プライマリへ追加したデータ(さきほど追加した 5)は、セカンダリへは複製されていません。
強制フェールオーバーは、後述の 2台のサーバーが障害発生した場合など、緊急時に使用するためのオプションなので、これを実行した後は、同期が自動停止するようになっています。同期を再開(RESUME)するには、明示的な操作が必要になります。
1.次に、SERVER1(元プライマリ、現在はセカンダリ)へ接続して、オブジェクト エクスプローラーを最新の情報に更新します。
[可用性データベース]フォルダーを展開すると、AGTestDB データベースのアイコンが「白」に変わっていることを確認できます。これは、「同期されていない」状態を表すアイコンです。
2.同期を再開するには、ALTER DATABASE ステートメントを次のように実行して、RESUME オプションを指定します。
RESUME の実行が完了したら、オブジェクト エクスプローラーを最新の情報に更新して、アイコンが正常な状態を表す「緑」に変わっていることを確認しましょう。
3.次に、SERVER1 へ接続して、SELECT ステートメントを実行し、現在のプライマリ(SERVER3)側で追加したデータ(5)が複製されていることを確認しておきましょう。
このように、FORCE~オプションで強制フェールオーバーを実行した場合には、同期を再開するために RESUME の実行が必要になります。
4.次に、SERVER2 についても同様に、RESUME を実行します。
5.RESUME が完了したら、SERVER3 の[オブジェクト エクスプローラーの詳細]で最新の情報に更新して、[同期状態]が「同期中」へ変更されていることを確認します。
1.次に、SERVER1 をプライマリへ戻します。この場合も(SERVER3 が非同期モードへ設定されているため)、FORCE~ オプションを利用した強制フェールオーバーを実行する必要があります。
2.強制フェールオーバーが完了したら、SERVER1 で[オブジェクト エクスプローラーの詳細]を最新の情報に更新します。
強制フェールオーバーを実行したので、また「同期されていません」と表示されていることを確認できます。
3.同期を再開するために、SERVER2 および SERVER3 に対して、RESUME を実行します。
4.RESUME が完了したら、SERVER1 で[オブジェクト エクスプローラーの詳細]を最新の情報に更新します。
SERVER2 は「同期済み」、SERVER3 は「同期中」と表示されて、この Step を始める前の状態へ戻ったことを確認します。
以上のように、非同期モードのセカンダリの場合には、強制フェールオーバーと RESUME を利用することで、役割変更を行うことができます。この手順は、後述の Step の障害発生時の復旧手順でも利用できるので、覚えておくことをお勧めします。
また、非同期モードでの単純な手動フェールオーバーのみを試す場合は、この Step の冒頭で説明した「いったん同期モードへ変更してから手動フェールオーバーを実行する」ことで、簡単に役割変更を試すこともできます。
これらの手順は、データベース ミラーリング機能を利用する場合もほとんど同じなので(可用性グループ機能は、データベース ミラーリングの場合と同じように操作できるものが多くあるので)、データベース ミラーリング機能を利用する場合にも、考え方や用語、基本的な操作方法などが役立ちます。
次の Step では、障害発生をシミュレートして、障害からの復旧手順を説明します。
第38回: SQL Server 2014 CTP2 の公開
第37回: SQL Server 2014 CTP1 の自習書をご覧ください
第36回: SQL Server 2014 CTP1 のクラスター化列ストア インデックスを試す
第35回: SQL Server 2014 CTP1 のインメモリ OLTP の基本操作を試す
第34回: GeoFlow for Excel 2013 のプレビュー版を試す
第33回:iPad と iPhone からの SQL Server 2012 Reporting Servicesのレポート閲覧
第32回:PASS Summit 2012 参加レポート
第31回:SQL Server 2012 Reporting Services 自習書のお知らせ
第30回:SQL Server 2012(RTM 版)の新機能 自習書をご覧ください
第29回:書籍「SQL Server 2012の教科書 開発編」のお知らせ
第26回:SQL Server 2012 の Power View 機能のご紹介
第25回:SQL Server 2012 の Data Quality Services
第24回:SQL Server 2012 自習書のご案内と初セミナー報告
第23回:Denali CTP1 が公開されました
第22回 チューニングに王道あらず
第21回 Microsoft TechEd 2010 終了しました
第20回 Microsoft TechEd Japan 2010 今年も登壇します
第19回 SQL Server 2008 R2 RTM の 日本語版が公開されました
第18回 「SQL Azure 入門」自習書のご案内
第17回 SQL Server 2008 自習書の追加ドキュメントのお知らせ
第16回 SQL Server 2008 R2 自習書とプレビュー セミナーのお知らせ
第15回 SQL Server 2008 R2 Reporting Services と新刊のお知らせ
第14回 TechEd 2009 のご報告と SQL Server 2008 R2 について
第13回 SQL Server 2008 R2 の CTP 版が公開されました
第12回 MVP Summit 2009 in Seattle へ参加