9 ロールの推移
Oracle Data Guard構成は、プライマリ・ロールで機能する1つのデータベース、およびスタンバイ・ロールで機能する1つ以上のデータベースで構成されています。
データベースの現行のロールを確認するには、V$DATABASE
ビューのDATABASE_ROLE
列を問い合せます。
Oracle Data Guard構成内のスタンバイ・データベースの数、位置、タイプおよびプライマリ・データベースからのREDOデータを各スタンバイ・データベースに伝播する方法に応じて、プライマリ・データベースの停止に対して設定できるロール管理オプションが決定します。
Oracle Data Guard構成でロールの推移を管理する方法の詳細は、次の各項を参照してください。
ノート:
これらの項では、SQL文を使用して、手動でロールの推移を実行する方法について説明します。ブローカにより管理されるOracle Data Guard構成でロールの推移を実行する場合は、これらのマニュアルの手順は使用しないでください。Oracle Data Guard Brokerで提供されているトランジション・プロシージャをかわりに使用します。
関連項目:
Oracle Data Guard Brokerの使用による以下の詳細は、『Oracle Data Guard Broker』を参照してください。
-
Oracle Enterprise Manager Cloud Controlでキー・クリックを1回する、あるいはDGMGRLコマンドライン・インタフェースで単一のコマンドを使用すると起動できることにより、スイッチオーバーおよびフェイルオーバーを単純化します。
-
プライマリ・データベースが使用できなくなった場合に、ファスト・スタート・フェイルオーバーを有効化し、フェイルオーバーを自動的に行います。ファスト・スタート・フェイルオーバーが有効化されている場合、Oracle Data Guardブローカによってフェイルオーバーの必要性が判断され、指定されたターゲット・スタンバイ・データベースへのフェイルオーバーが自動的に開始されます。DBAによる操作は不要です。
9.1 ロールの推移の概要
データベースは、プライマリまたはスタンバイという相互に排他的なロールのいずれかで動作します。
Oracle Data Guardでは、SQL文を使用して、またはOracle Data Guard Brokerのいずれかのインタフェースを使用して、これらのロールを動的に変更できます。Oracle Data Guardは、次のロール・トランジションをサポートしています。
-
スイッチオーバー
プライマリ・データベースが、スタンバイ・データベースの1つを使用してロールを切り替えられるようにします。スイッチオーバー中にデータが失われることはありません。スイッチオーバーの完了後、各データベースは、新しいロールとともにOracle Data Guard構成に継続して含まれます。
-
フェイルオーバー
プライマリ・データベースの障害時に、スタンバイ・データベースをプライマリ・ロールに変更します。障害の前にプライマリ・データベースが最大保護モードまたは最大可用性モードで動作していなかった場合、データ消失が発生することがあります。フラッシュバック・データベースがプライマリ・データベースで使用可能になっている場合は、障害の原因が修正された後、元どおり新しいプライマリ・データベースのスタンバイに戻すことができます。
関連項目:
-
「ロールの推移の準備」では、停止時間およびデータ消失のリスクを最小限にするために、どのロールの推移を選択するかについて説明します。
-
スイッチオーバーの詳細は、「スイッチオーバー」を参照
-
フェイルオーバーの詳細は、「フェイルオーバー」を参照してください
-
ブローカの管理対象のフェイルオーバーが発生した場合にデータベース・クライアントが使用可能なイベント通知、およびデータベース接続フェイルオーバー・サポートの詳細は、Oracle Data Guard Brokerを参照してください。
9.1.1 ロールの推移の準備
ロールの推移を開始する前に、各データベースが正しく構成されていること、およびスタンバイ・データベースにREDO転送エラーやREDOギャップがないことを確認する必要があります。
-
各データベースが、担う予定のロールについて正しく構成されていることを確認します。プライマリ・データベースとスタンバイ・データベースでデータベース初期化パラメータ、
ARCHIVELOG
モード、スタンバイREDOログ、オンラインREDOログを構成する方法の詳細は、「フィジカル・スタンバイ・データベースの作成」および「ロジカル・スタンバイ・データベースの作成」を参照してください。ノート:
スイッチオーバーまたはフェイルオーバーの発生時に、すべてのスタンバイ・サイトが新しいプライマリ・データベースから引き続きREDOデータを受信するように、各スタンバイ・データベース上で
LOG_ARCHIVE_DEST_
n
およびLOG_ARCHIVE_DEST_STATE_
n
パラメータを定義する必要があります。 -
プライマリ・データベースで
V$ARCHIVE_DEST_STATUS
ビューを問い合せて、スタンバイ・データベースにREDO転送エラー、またはREDOギャップがないことを確認します。たとえば、
LOG_ARCHIVE_DEST_2
に関連付けられているスタンバイ・データベースのステータスをチェックするには、次の問合せを使用します。SQL> SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2; STATUS GAP_STATUS --------- ------------------------ VALID NO GAP
スタンバイ・データベースに対応する行の
STATUS
列の値がVALID
、GAP_STATUS
列の値がNOGAP
になるまで、次に進まないでください。 -
スタンバイ・データベースに存在する一時ファイルが、プライマリ・データベースの一時ファイルと一致することを確認します。
-
新たにプライマリ・データベースになるように設定されたスタンバイ・データベースで現在有効になっているREDOの適用遅延を解除します。 遅延を解除しないと、スイッチオーバー時間が長くなり、スイッチオーバーが許可されなくなる場合があります。
-
リアルタイム問合せモードにあるフィジカル・スタンバイ・データベースへのスイッチオーバーを実行する前に、できるだけ迅速に、クリーンにロール・トランジションを実施させるために、そのスタンバイ・データベースのすべてのインスタンスを、マウント済だがオープンされていない状態にすることを検討します。
-
Oracle RACプライマリ・データベースからフィジカル・スタンバイ・データベースへのスイッチオーバーを実行する場合、1つを残してすべてのプライマリ・データベース・インスタンスを停止する必要はありません。
9.1.2 ロールの推移のターゲット・スタンバイ・データベースの選択
複数のスタンバイ・データベースがあるOracle Data Guard構成の場合、ロールの推移のターゲット・スタンバイ・データベースを選択する際には、多数の要因を考慮する必要があります。
次のようなものがあります:
-
スタンバイ・データベースのローカリティ。
-
スタンバイ・データベースの機能(CPU数、使用可能なI/O帯域幅などのハードウェア仕様)。
-
ロールの推移の実行に要する時間。これは、スタンバイ・データベースがREDOデータの適用でどの程度遅れているか、およびアプリケーションの可用性とデータ消失をどの程度柔軟にトレードオフできるかに影響を受けます。
-
スタンバイ・データベースのタイプ。
ロールの推移のターゲットとして選択されたスタンバイのタイプにより、構成内の他のスタンバイ・データベースがロールの推移後にどのように動作するかが決まります。ロールの推移の前に新しいプライマリがフィジカル・スタンバイだった場合、構成内の他のスタンバイ・データベースは新しいプライマリのスタンバイになります。ロールの推移の前に新しいプライマリがロジカル・スタンバイだった場合、構成内の他のロジカル・スタンバイは新しいプライマリのスタンバイになりますが、構成内のフィジカル・スタンバイは引き続き古いプライマリのスタンバイであるため、新しいプライマリを保護しません。後者の場合、次回のスイッチオーバーまたはフェイルオーバーで元のプライマリ・データベースに戻ると、すべてのスタンバイが現行のプライマリのスタンバイとしての元のロールに戻ります。これらの理由により、フィジカル・スタンバイとロジカル・スタンバイの両方が含まれる構成内におけるロールの推移の最適なターゲットは、通常、フィジカル・スタンバイです。
ノート:
スナップショット・スタンバイは、ロールの推移のターゲットにはできません。スナップショット・スタンバイ・データベースをロールの推移のターゲットとして使用するには、最初にこのデータベースをフィジカル・スタンバイ・データベースに変換し、プライマリ・データベースから受信したすべてのREDOを適用できるようにします。「フィジカル・スタンバイ・データベースへのスナップショット・スタンバイ・データベースの変換」を参照してください。
Oracle Data GuardにはV$DATAGUARD_STATS
ビューが用意されています。このビューを使用して、スタンバイ・データベースのデータの最新性の観点で各スタンバイ・データベースを評価し、使用可能なREDOデータがすべてスタンバイ・データベースに適用された場合のロールの推移の実行に必要な時間を評価できます。次に例を示します。
SQL> COLUMN NAME FORMAT A24 SQL> COLUMN VALUE FORMAT A16 SQL> COLUMN DATUM_TIME FORMAT A24 SQL> SELECT NAME, VALUE, DATUM_TIME FROM V$DATAGUARD_STATS; NAME VALUE DATUM_TIME ------------------------ ---------------- ------------------------ transport lag +00 00:00:00 06/18/2009 12:22:06 apply lag +00 00:00:00 06/18/2009 12:22:06 apply finish time +00 00:00:00.000 estimated startup time 9
この問合せの出力は、スタンバイ・データベースが、プライマリ・データベースにより生成されたすべてのREDOを受信し、適用したことを示しています。これらの統計は、2009年6月18日12:22.06にプライマリ・データベースから受信したデータを使用して計算されたものです。
apply
lag
およびtransport
lag
メトリックは、プライマリ・データベースから受信されるデータに基づいて計算されます。これらのメトリックは、プライマリ・データベースとスタンバイ・データベースの間の通信が中断されると失効します。apply
lag
およびtransport
lag
メトリックのDATUM_TIME
列の値が変化していないことは、プライマリ・データベースとスタンバイ・データベース間の通信障害と考えられる原因で、これらのメトリックが更新されずに失効したことを示しています。
9.1.3 スイッチオーバー
スイッチオーバーは、通常、計画停止時のプライマリ・データベースの停止時間を短縮するために使用されます。
計画済停止とは、オペレーティング・システムまたはハードウェアのアップグレード、またはOracleデータベース・ソフトウェアとパッチ・セットのローリング・アップグレードなどのイベントです。
スイッチオーバーは、2つのフェーズで実行されます。最初のフェーズで、既存のプライマリ・データベースがスタンバイ・ロールに推移します。2番目のフェーズで、スタンバイ・データベースがプライマリ・ロールに推移します。
図9-1は、データベースのロールを切り替える前の2つのサイトにあるOracle Data Guard構成を示します。この構成では、プライマリ・データベースはサンフランシスコにあり、スタンバイ・データベースはボストンにあります。
図9-2に、元のプライマリ・データベースがスタンバイ・データベースにスイッチオーバーされた後、元のスタンバイ・データベースがまだ新しいプライマリ・データベースになっていないOracle Data Guard環境を示します。このとき、Oracle Data Guard構成には一時的に2つのスタンバイ・データベースが存在することになります。
図9-3は、スイッチオーバー実行後のOracle Data Guard環境を示します。元のスタンバイ・データベースは新しいプライマリ・データベースになります。現在、プライマリ・データベースはボストンにあり、スタンバイ・データベースはサンフランシスコにあります。
スイッチオーバーの準備
「ロールの推移の準備」に示した前提条件が満たされていることを確認します。また、スイッチオーバーの場合は、次の前提条件が満たされている必要があります。
-
フィジカル・スタンバイ・データベースが関与するスイッチオーバーの場合は、プライマリ・データベースがオープンし、REDO Applyがスタンバイ・データベースでアクティブであることを確認します。
-
ロジカル・スタンバイ・データベースが関与するスイッチオーバーの場合は、プライマリおよびスタンバイ・データベース・インスタンスの両方がオープンし、SQL Applyがアクティブであることを確認します。
関連項目:
-
REDO Applyの詳細は、「REDOデータのフィジカル・スタンバイ・データベースへの適用」を参照してください
-
SQL Applyの詳細は、「REDOデータのロジカル・スタンバイ・データベースへの適用」を参照してください
9.1.4 フェイルオーバー
通常、フェイルオーバーは、プライマリ・データベースが使用不可能になり、適正な時間内にプライマリ・データベースをリストアしてサービスを再開できない場合にのみ使用します。
フェイルオーバー時に実行するアクションは、フェイルオーバーに関与するスタンバイ・データベースがロジカルかフィジカルか、フェイルオーバー時のOracle Data Guard構成の状態、およびフェイルオーバーを開始するために使用する特定のSQL文によって異なります。
図9-4に、サンフランシスコにあるプライマリ・データベースからボストンにあるフィジカル・スタンバイ・データベースへのフェイルオーバーの結果を示します。
フェイルオーバーの準備
ノート:
フェイルオーバーのために選択した物理スタンバイ・データベースで管理されているスタンバイ・リカバリが、ORA-752
またはORA-600
[3020]
のエラーで停止した場合は、このまま「プライマリ・データベースでの書込みの欠落エラーからのリカバリ」に進んでください。
可能な場合は、フェイルオーバーを実行する前に、使用可能な未適用のプライマリ・データベースREDOデータを可能なかぎりスタンバイ・データベースに転送します。
「ロールの推移の準備」に示した前提条件が満たされていることを確認します。また、フェイルオーバーの場合は、次の前提条件が満たされている必要があります。
-
最大保護モードで実行中のスタンバイ・データベースがフェイルオーバーに関与する場合は、スタンバイ・データベースで次の文を発行して、データベースを最大パフォーマンス・モードにします。
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
適切なスタンバイ・データベースが使用できる場合は、フェイルオーバーが完了した後に、新しいプライマリ・データベースで希望の保護モードをリセットできます。
最大保護モードに設定されているスタンバイ・データベースはフェイルオーバーできないため、この作業が必要になります。さらに、最大保護モードのプライマリ・データベースがスタンバイ・データベースと通信中の場合は、スタンバイ・データベースを最大保護モードから最大パフォーマンス・モードに変更するために
ALTER DATABASE
文を発行しても失敗します。フェイルオーバーを実行すると元のプライマリ・データベースはOracle Data Guard構成から削除されるため、この機能によって、最大保護モードで実行されているプライマリ・データベースを計画外のフェイルオーバーの影響から保護します。
9.2 フィジカル・スタンバイ・データベースが関与するロールの推移
Oracle Databaseリリース12cリリース1 (12.1)以降を実行している場合に、フィジカル・スタンバイ・データベースへのスイッチオーバーおよびフェイルオーバーを実行する手順が簡略化されました。
以前の手順も引き続きサポートされますが、次の項で説明している新しい手順を使用することをお薦めします。
ノート:
Oracle Databaseリリース18cでは、ロールの推移中にActive Data Guardスタンバイ上のデータベース・バッファ・キャッシュに移入するためにディスクから読み取られた物理ブロックがアプリケーションのパフォーマンスに影響しないように、バッファ・キャッシュの状態が管理されます。これにより、ロールの推移後の新しいプライマリでアプリケーションのパフォーマンスが向上します。バッファ・キャッシュは、スタンバイ・データベースが単一インスタンス・データベースの場合にのみ保持されます。ロールの推移中のフィジカル・スタンバイ・セッション接続の維持
Oracle Database 12c
リリース2 (12.2.0.1)以降、フィジカル・スタンバイ・データベースがプライマリに変換されるときに、スイッチオーバー/フェイルオーバー中にすべてのセッションを中断せずフィジカル・スタンバイへの接続を維持するオプションがあります。
この機能を使用可能にするには、スタンバイ・インスタンスが開始する前にinit.oraファイルのSTANDBY_DB_PRESERVE_STATES
初期化パラメータを設定します。このパラメータは、フィジカル・スタンバイ・データベースのみに適用されます。指定できる値は次のとおりです:
-
NONE
— スタンバイ上のセッションはスイッチオーバー/フェイルオーバー中に保持されません。これはデフォルト値です。 -
ALL
— ユーザー・セッションはスイッチオーバー/フェイルオーバー中に保持されます。 -
SESSION
— ユーザー・セッションはスイッチオーバー/フェイルオーバー中に保持されます。
関連項目:
-
フィジカル・スタンバイ・データベースへのロールの推移を実行するときに発生する可能性のある問題のトラブルシューティング方法については、「Oracle Data Guardのトラブルシューティング」を参照してください。
-
以前のリリースで使用された手順の詳細と、古い構文と新しい構文の比較については、「古い構文を使用したロールの推移の実行」を参照してください。
-
STANDBY_DB_PRESERVE_STATES
初期化パラメータの詳細は、Oracle Databaseリファレンスを参照してください。
9.2.1 フィジカル・スタンバイ・データベースへのスイッチオーバーの実行
このステップでは、フィジカル・スタンバイ・データベースへのスイッチオーバーを実行する方法について説明します。
ノート:
プライマリ・データベースおよびスタンバイ・データベースに接続する遠隔同期インスタンス(または優先および代替の遠隔同期インスタンスの組合せ)が存在する場合、スタンバイにスイッチオーバーする手順はこのトピックで説明しているものと同じです。遠隔同期インスタンスが使用可能か否かは、スイッチオーバーに影響しません。スイッチオーバー中、プライマリとスタンバイは直接相互に通信し、遠隔同期インスタンスを意識せずにスイッチオーバーのロールの推移ステップを実行できる必要があります。スイッチオーバー後、遠隔同期インスタンスが新しいロールの2つのデータベースにサービスを提供できるように構成を正しく設定する方法の例は、「遠隔同期」を参照してください。
9.3 ロジカル・スタンバイ・データベースが関与するロールの推移
ロールの推移ステップは、スイッチオーバーとフェイルオーバーのどちらを実行するかによって異なります。
ロジカル・スタンバイ・データベースに伴うスイッチオーバーおよびフェイルオーバーの実行方法の詳細は、次のトピックを参照してください。
ノート:
ロジカル・スタンバイでは、データベース・サービスはレプリケートしません。ロジカル・スタンバイに対するフェイルオーバーまたはスイッチオーバーのイベントでは、プライマリでのサービスに接続している中間層が接続できなくなる(サービスの作成がレプリケートされないため)か、正しくないエディションに接続するようになります(サービス属性の変更がレプリケートされないため)。
Oracle Clusterwareでは、管理するサービスをロジカル・スタンバイにレプリケートしません。それらのプライマリとスタンバイ間での同期を手動で維持する必要があります。Oracle Clusterwareの詳細は、『Oracle Clusterware管理およびデプロイメント・ガイド』を参照してください。
9.3.1 ロジカル・スタンバイ・データベースへのスイッチオーバーの実行
プライマリ・データベースとロジカル・スタンバイ・データベースとの間でスイッチオーバーを実行する場合、スイッチオーバーは、常にプライマリ・データベースで開始し、ロジカル・スタンバイ・データベースで完了してください。
スイッチオーバーが成功するためには、次のステップを記載されているとおりの順序で実行する必要があります。
-
スイッチオーバーを実行できるかどうかを確認するには、現行のプライマリ・データベースで
V$DATABASE
固定ビューのSWITCHOVER_STATUS
列を問い合せます。次に例を示します。
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS ----------------- TO STANDBY 1 row selected
SWITCHOVER_STATUS
列の値TO STANDBY
またはSESSIONS ACTIVE
は、プライマリ・データベースをロジカル・スタンバイ・ロールに切替え可能であることを示します。これらの値のいずれかが表示されない場合は、Oracle Data Guard構成が正常に機能していることを確認してください(たとえば、LOG_ARCHIVE_DEST_
n
パラメータのすべての値が正しく指定されていることを確認します)。V$DATABASE
ビューのSWITCHOVER_STATUS
列に有効なその他の値の詳細は、『Oracle Databaseリファレンス』を参照してください。 -
ロジカル・スタンバイ・データベース・ロール用に現行のプライマリ・データベースを準備するには、プライマリ・データベースで次のSQL文を発行します。
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;
この文は現行プライマリ・データベースに対して、間もなくロジカル・スタンバイ・ロールに切り替わり、新しいプライマリ・データベースからREDOデータを受信し始めることを通知します。LogMinerディクショナリの受信に備えてプライマリ・データベースでこのステップを実行し、ステップ3で説明したように、現行のロジカル・スタンバイ・データベースのREDOストリームに記録できるようにします。
この操作に成功すると、
V$DATABASE.SWITCHOVER_STATUS
列に値PREPARING SWITCHOVER
が表示されます。 -
スイッチオーバーのターゲットであるロジカル・スタンバイ・データベースでLogMinerディクショナリを作成するには、次の文を使用します。
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY;
また、この文は、現行のプライマリ・データベース、およびOracle Data Guard構成内の他のスタンバイ・データベースにREDOデータの転送を開始するロジカル・スタンバイ・データベースで、REDO転送サービスを開始します。このロジカル・スタンバイ・データベースからREDOデータを受信するサイトは、REDOデータを受け入れますが、適用はしません。
ロジカル・スタンバイ・データベースの
V$DATABASE.SWITCHOVER_STATUS
には、LogMinerディクショナリがREDOストリームに記録されている間、最初はPREPARING DICTIONARY
が表示されます。正常に完了すると、SWITCHOVER_STATUS
列にPREPARING SWITCHOVER
が表示されます。 -
プライマリ・データベースからロジカル・スタンバイ・ロールへのロール・トランジションを完了するには、プライマリ・データベースの
V$DATABASE
固定ビューのSWITCHOVER_STATUS
列を問い合せることで、プライマリ・データベースがLogMinerディクショナリを受信したことを確認する必要があります。LogMinerディクショナリを受信しなければスイッチオーバーを続行できません。現行のプライマリ・データベースが以降のプライマリ・データベースから受信するREDOレコードを解釈できる必要があるためです。SWITCHOVER_STATUS
列にスイッチオーバーの進捗が示されています。問合せが
TO LOGICAL STANDBY
値を戻した場合は、ステップ5に進むことができます。次に例を示します。SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS ----------------- TO LOGICAL STANDBY 1 row selected
ノート:
次の文を示された順序で発行すると、スイッチオーバー操作を取り消すことができます。
-
プライマリ・データベースでスイッチオーバーを取り消します。
SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;
-
ロジカル・スタンバイ・データベースでスイッチオーバーを取り消します。
SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;
-
-
プライマリ・データベースからロジカル・スタンバイ・データベース・ロールへのロールの推移を完了するには、次のSQL文を発行します。
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;
この文は、プライマリ・データベースで現在のトランザクションがすべて終了するまで待機し、新規ユーザーによる新規トランザクションの開始を防止し、スイッチオーバーがコミットされる時点を設定します。
この文を実行すると、ユーザーはロジカル・スタンバイ・データベースでメンテナンスされているデータの変更もできません。スイッチオーバーを迅速に実行するには、スイッチオーバー文を発行する前に、プライマリ・データベースが静止状態で更新アクティビティが実行されていないことを確認してください(たとえば、すべてのユーザーをプライマリ・データベースから一時的にログオフします)。
V$TRANSACTION
ビューを問い合せると、この文の実行を遅延させる可能性のある現在進行中のトランザクションのステータス情報を取得できます。この時点でプライマリ・データベースのロールが推移して、スタンバイ・データベース・ロールで実行されます。
プライマリ・データベースをロジカル・スタンバイ・データベース・ロールに推移した場合は、データベースを停止して再起動する必要はありません。
-
プライマリ・データベースからロジカル・スタンバイ・ロールへのロールの推移を完了し、構成内のスタンバイ・データベースがスイッチオーバー通知を受け取った後、ターゲット・スタンバイ・データベースで
V$DATABASE
固定ビューのSWITCHOVER_STATUS
列を問い合せ、ターゲット・スタンバイ・データベースがスイッチオーバー通知を処理したことを確認します。使用可能なすべてのREDOレコードがロジカル・スタンバイ・データベースに適用されると、SQL Applyは予想されるロールの推移の準備を自動的に停止します。スイッチオーバー中に
SWITCHOVER_STATUS
値が更新され、進捗を示します。ステータスがTO PRIMARY
の場合は、ステップ7に進むことができます。次に例を示します。
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS ----------------- TO PRIMARY 1 row selected
V$DATABASE
ビューのSWITCHOVER_STATUS
列に有効なその他の値の詳細は、『Oracle Databaseリファレンス』を参照してください。 -
プライマリ・ロールに切り替えるロジカル・スタンバイ・データベースで、次のSQL文を使用し、ロジカル・スタンバイ・データベースをプライマリ・ロールに切り替えます。
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Oracle Data Guard構成内のロジカル・スタンバイ・データベースは、停止して再起動する必要はありません。ロールの推移のターゲット・スタンバイ・データベースの選択で説明したように、構成内の他のすべてのロジカル・スタンバイは新しいプライマリのスタンバイになりますが、フィジカル・スタンバイ・データベースは、元のプライマリ・データベースのスタンバイのままです。
-
新しいロジカル・スタンバイ・データベースでSQL Applyを開始します。
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
9.3.2 ロジカル・スタンバイ・データベースへのフェイルオーバーの実行
ロジカル・スタンバイ・データベースが関与するフェイルオーバーによるロールの推移では、障害の発生したプライマリ・データベースとすべてのロジカル・スタンバイ・データベースで対処措置を実行する必要があります。
このトピックでは、ロジカル・スタンバイ・データベースに伴うフェイルオーバーの実行方法について説明します。障害の発生したプライマリ・データベースでフラッシュバック・データベースが有効化されていない場合は、現行のプライマリ・データベースから作成したバックアップを使用してデータベースを再作成する必要があります。それ以外の場合は、「フラッシュバック・データベースを使用した障害の発生したプライマリのスタンバイ・データベースへの変換」で説明する手順に従って、障害の発生したプライマリ・データベースを新しいプライマリ・データベースのロジカル・スタンバイ・データベースに変換できます。
構成に対する保護モードおよびREDO転送サービスに対して選択した属性に従って、プライマリ・データベースの修正の一部またはすべてを自動的にリカバリすることも可能です。
-
プライマリ・データベースをマウントできる場合、プライマリ・データベースからスタンバイ・データベースに、未送信のアーカイブされた現行のREDOをフラッシュします。この操作が正常に終了した場合、プライマリ・データベースがデータ消失ゼロのデータ保護モードで実行されていなくても、データの消失がないようにフェイルオーバーすることができます。
まず、ターゲット・スタンバイ・データベースでREDO Applyがアクティブであることを確認します。次にプライマリ・データベースをマウントします。オープンはしないでください。
次のSQL文をプライマリ・データベースで発行します。
SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;
target_db_name
には、プライマリ・データベースからフラッシュされたREDOを受信するスタンバイ・データベースのDB_UNIQUE_NAME
を指定します。この文は、未送信のREDOをすべて、プライマリ・データベースからスタンバイ・データベースにフラッシュし、このREDOがスタンバイ・データベースに適用されるまで待機します。
-
構成に含まれるコンポーネントの状態によっては、プライマリ・データベースのアーカイブREDOログ・ファイルにアクセスできる場合があります。その可能性がある場合は、次の手順に従います。
-
ロジカル・スタンバイ・データベースでアーカイブREDOログ・ファイルが欠落しているかどうかを判断します。
-
欠落しているログ・ファイルを、プライマリ・データベースからロジカル・スタンバイ・データベースにコピーします。
-
コピーしたログ・ファイルを登録します。
次の文を発行して、アーカイブREDOログ・ファイルをロジカル・スタンバイ・データベースに登録できます。次に例を示します。
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE - > '/disk1/oracle/dbs/log-%r_%s_%t.arc'; Database altered.
-
-
ロールベースの宛先をまだ構成していない場合は、新しいプライマリ・データベースのリモート・ロジカル・スタンバイ宛先に対応する初期化パラメータを特定して、これらの宛先ごとにREDOデータのアーカイブを手動で使用可能にします。
たとえば、
LOG_ARCHIVE_DEST_2
パラメータで定義したリモート宛先のアーカイブを可能にするには、次の文を発行します。SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
後で新しいプライマリ・データベースを再起動した場合にもこの変更を保持するには、適切なテキスト初期化パラメータ・ファイルまたはサーバー・パラメータ・ファイルを更新します。通常、データベースがプライマリ・ロールで動作する場合はリモート宛先へのアーカイブを可能にし、データベースがスタンバイ・ロールで動作する場合はリモート宛先へのアーカイブを不可能にする必要があります。
-
ターゲット・ロジカル・スタンバイ・データベース(新規プライマリ・ロールに推移させるデータベース)で、次の文を発行します。
SQL> ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE FINISH APPLY;
この文はリモート・ファイル・サーバー(RFS)プロセスを停止し、ロジカル・スタンバイ・データベースがプライマリ・データベースになる前にスタンバイREDOログ・ファイルに残っているREDOデータを適用し、SQL Applyを停止して、データベースをプライマリ・データベース・ロールでアクティブ化します。
FINISH APPLY
句が指定されていない場合、現在のスタンバイREDOログ・ファイルからの適用されていないREDOログ・ファイルはスタンバイ・データベースがプライマリ・データベースになる前には適用されません。 -
「フェイルオーバー後のロジカル・スタンバイ・データベースの構成」で説明する方法に従って、既存のロジカル・スタンバイ・データベースが新しいプライマリ・データベースを引き続き保護できるようにします。
-
Oracle Data Guardデータベース・フェイルオーバー直後に、新しいプライマリ・データベースのバックアップを行います。データベースの完全なバックアップ・コピーがなければ、フェイルオーバー後の変更をリカバリすることができないので、バックアップをすぐに実行することは安全策として必要な作業です。
-
フェイルオーバーの完了後、元のプライマリ・データベースは「フラッシュバック・データベースを使用した障害が発生したプライマリのスタンバイ・データベースへの変換」または「RMANバックアップを使用した障害が発生したプライマリのスタンバイ・データベースへの変換」で説明する方法に従って、新しいプライマリ・データベースのロジカル・スタンバイ・データベースに変換できます。あるいは、「ロジカル・スタンバイ・データベースの作成」で説明した方法に従って、新しいプライマリ・データベースのバックアップからロジカル・スタンバイ・データベースとして再作成できます。
元のプライマリ・データベースをスタンバイ・データベースに変換したら、スイッチオーバーを実行してプライマリ・ロールにリストアできます。
9.4 ロールの推移後のフラッシュバック・データベースの使用
ロール・トランジションの後に、オプションでFLASHBACK DATABASE
コマンドを使用してデータベースをロール・トランジション前のある時点、またはシステム変更番号(SCN)に戻すことができます。
プライマリ・データベースのフラッシュバックを行う場合、同じ(または以前の)SCNまたは時刻にすべてのスタンバイ・データベースをフラッシュバックする必要があります。この方法でプライマリまたはスタンバイ・データベースのフラッシュバックを行う場合は、過去のスイッチオーバーを気にする必要はありません。SCN/時刻が過去の任意の時点でのスイッチオーバーより前の場合、Oracleは自動的に過去のスイッチオーバーを越えてフラッシュバックを行うことができます。
ノート:
ロールの推移が発生する前に、データベースでフラッシュバック・データベースを有効化しておく必要があります。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
9.4.1 スイッチオーバー後のフラッシュバック・データベースの使用
スイッチオーバー後にFLASHBACK DATABASE
コマンドを使用して、データベースをスイッチオーバー発生前の時点またはシステム変更番号(SCN)に戻すことができます。
スイッチオーバーにフィジカル・スタンバイ・データベースが関与していた場合、フラッシュバック操作中はプライマリおよびスタンバイ・データベース・ロールが保持されます。データベースが実行中のロールは、フラッシュバックした時点またはターゲットSCNまでデータベースがフラッシュバックされても変化しません。スイッチオーバー後からフラッシュバックの前までフィジカル・スタンバイ・ロールで実行されていたデータベースは、フラッシュバック・データベース操作後もフィジカル・スタンバイ・データベースで実行されます。
スイッチオーバーにロジカル・スタンバイ・データベースが関与していた場合、フラッシュバックするとスタンバイ・データベースのロールはフラッシュバックした時点またはターゲットSCNでのロールに変更されます。
9.4.2 フェイルオーバー後のフラッシュバック・データベースの使用
フラッシュバック・データベースを使用して、障害の発生したプライマリ・データベースをフェイルオーバー発生前の時点に変換してから、スタンバイ・データベースに変換できます。
詳細な手順は、「フラッシュバック・データベースを使用した障害が発生したプライマリのスタンバイ・データベースへの変換」を参照してください。