9.7.5.4 テスト・マスター・データベースの更新

テスト・マスター・データベースのリフレッシュには2つのオプションがあります。

  • Oracle Data Guardによりテスト・マスター・データベースをリフレッシュ

    Oracle Data Guardレプリカがテスト・マスター・データベースとして使用されたのがごく短期間で、ソース・データベースでこの期間に生成されたすべてのREDOがディスク上のアーカイブ・ログにある場合、REDO送信を有効にしてREDO適用を開始できます。テスト・マスター・データベースは標準のOracle Data Guardプロトコルを使用して、アーカイブ・ログを取得し、ログを適用して、プライマリ・データベースの状態に追い付きます。Oracle Data Guardレプリカが必要な時点の状態になったら、REDO送信を無効にして、REDO適用を停止し、テスト・マスターとスナップショットの作成サイクルを繰り返します(「テスト・マスターの設定」および「スナップショットの作成」を参照)。

    このオプションのメリットは、テスト・マスター・データベースを最新状態にする前の段階でREDO適用を停止できることです。

    Oracle Data Guardによってスタンバイをリフレッシュさせるには、スタンバイへのログの送信とスタンバイでのREDOの適用を有効にします。

    DGMGRL> edit database TESTMASTER set property logshipping=ON; 
    Property "logshipping" updated 
    DGMGRL> edit database TESTMASTER set state=apply-on; 
    Succeeded
    
  • RMAN RECOVER...FROM SERVICEを使用してテスト・マスター・データベースをロール・フォワード

    Oracle Data Guardレプリカがテスト・マスター・データベースとして長期にわたって使用されている場合、またはOracle Data Guardによってテスト・マスター・データベースを自動的にリフレッシュするためのREDOがディスク上にない場合は、RMANを使用してネットワークを介したライブ増分適用を実行します。

    この方法を使用する主なメリットは、追加のディスク領域が必要ないことです。RMANが、プライマリの変更済ブロックをネットワークを介してスタンバイに移し、直接適用します。また、RMANは、テスト・マスターのデータ・ファイルのSCNに基づいて取得すべきブロックを判別することでプロセスを大幅に単純化します。この方法では中間の時点にリカバリすることはできません。リフレッシュによってテスト・マスター・データベースがプライマリと同じ状態になります。この方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』RMANリカバリの実行: 拡張シナリオに関する項を参照してください。

RMANネットワーク増分を使用してテスト・マスター・データベースをリフレッシュするには:

  1. RMAN接続用にOracle Net Servicesを準備します。

    これらのステップを実行する必要があるのは1回のみです。

    1. テスト・マスター・データベース(Oracle Data Guardレプリカ)のlistener.oraエントリを作成します。

      データベースがNOMOUNTモードでオープンされているときにサービスが開始されないため、リスナー・エントリにより、RMANがSIDを使用してターゲットに接続できるようになります。次に、このエントリの例を示します。

      SID_LIST_LISTENER = 
        (SID_LIST =   
          (SID_DESC = 
            (SID_NAME = TESTMASTER1)
            (ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/dbhome_1)
          )
        )
      
    2. listener.oraに対する変更を反映するためにリスナーをリロードします。
       $ lsnrctl reload listener 
    3. ローカル・テスト・マスター・インスタンスのSIDを指すTNSエントリをテスト・マスター環境に作成します。
      このエントリでは、接続リクエストが正しいホストに送られるように、SCAN名ではなくローカル・ホスト名を使用する必要があります。
      TESTMASTER1 = 
        (DESCRIPTION = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = standbydb01.example.com)(PORT = 1521))
          (CONNECT_DATA = 
            (SERVER = DEDICATED) 
            (SID = TESTMASTER1) 
            (UR=A) 
          ) 
        ) 
      
  2. RMAN経由でテスト・マスター・データベースに接続し、CURRENT_SCNを後で使用するために保存します。
    この値を使用して、直前のリフレッシュ以降に新たに作成されたファイルをソース・データベースからリストアする必要があるかどうかを判別します。
    RMAN> select current_scn from v$database;
    CURRENT_SCN# 
    ------------------ 
              17081990 
  3. REDOログ・ファイル名およびグループ識別子を表示します。
    Oracle Data GuardレプリカのオンラインREDOログ・ファイルおよびスタンバイREDOログ・ファイルの名前は、後のステップで必要となる場合があります。
    RMAN> SELECT type, group#, member FROM v$logfile;
  4. ソース・データベースに基づいてOracle Data Guardレプリカのスタンバイ制御ファイルをリフレッシュして、制御ファイルを最新状態にします。
    1. RMANターゲットとしてOracle Data Guardレプリカに再接続します。
    2. NOMOUNTモードでターゲットを再起動します。
      RMAN> startup nomount force;
    3. ソース・データベース上の制御ファイルを使用して、スタンバイ制御ファイルをリストアします。

      次の例では、SOURCEMASTER (ソース・データベース)のデータベース制御ファイルを使用して、Oracle Data Guardレプリカ上の制御ファイルがリストアされます。

      RMAN> RESTORE STANDBY CONTROLFILE FROM SERVICE SOURCEMASTER;
      
    4. Oracle Data Guardレプリカをマウントします。
      RMAN> ALTER DATABASE MOUNT;
  5. スタンバイ制御ファイル内のデータファイル名および一時ファイル名を更新します。

    RMANカタログを使用していない場合、スタンバイ制御ファイル内のファイルの名前は、スタンバイではなく、ソース・データベースで使用されていた名前になります。

    CATALOGコマンドおよびSWITCHコマンドを使用してすべてのデータ・ファイルの名前を更新します。SWITCHコマンドは、ソース・データベースの新たに作成されたファイルをステップ7でリストアした後で使用されます。

    次の例では、+DATA/TESTMASTER/DATAFILE/Oracle Data Guardレプリカのデータ・ファイルの場所です。すべてのデータファイルを、この場所に格納する必要があります。

    RMAN> CATALOG START WITH '+DATA/TESTMASTER/DATAFILE/';
    
  6. ソース・データベースからリストアする必要がある新しいファイルが追加されたかどうかを判断します。

    ステップ2CURRENT_SCNを使用します。

    RMAN> SELECT file# FROM v$datafile WHERE creation_change# >= 17081990;
     FILE#
    ---------- 
             9 
            10 
    
  7. 前の問合せでファイルが返された場合は、それらのデータ・ファイルをソース・データベースからリストアします。

    前のステップで返されたFILE#値のリストを使用して、次のようなRMANコマンド・ブロックを実行します。FILE#が返されなかった場合はこのステップをスキップします。

    RMAN> run{ 
    2> set newname for database to '+DATA';
    3> restore datafile 9,10 from service SOURCEMASTER;
    4> } 
    
  8. RMANカタログを使用していない場合は、スタンバイ制御ファイル内のデータ・ファイルの名前を変更します。

    ステップ5でカタログ化されているコピーに切り替えます。

    RMAN> SWITCH DATABASE TO COPY;
    
  9. スタンバイ制御ファイル内のオンラインREDOログとスタンバイREDOログの名前を更新します。
    次のいずれかの方法を使用します。
    • ALTER DATABASE CLEARコマンドを使用して、Oracle Data GuardレプリカのすべてのREDOログ・グループのログ・ファイルを消去します。RMANで、すべてのスタンバイREDOログおよびオンラインREDOログ・ファイルを再作成します。

      ノート:

      Oracle Data Guardレプリカに、ソース・データベースのオンラインREDOログ・ファイルおよびスタンバイREDOログ・ファイルへのアクセス権がない場合のみ、ログ・ファイルをクリアすることをお薦めします。Oracle Data Guardレプリカに、ソース・データベースのREDOログ・ファイルへのアクセス権があり、ソース・データベースのREDOログ・ファイル名がOMF名である場合は、ALTER DATABASEコマンドでソース・データベース上のログ・ファイルを削除します。

      また、ログ・ファイルのクリアによって新しいログ・ファイルが作成されます。制御ファイルが既存のファイルを認識していないため、既存のログ・ファイルは使用されません。領域を節約するため、ALTER DATABASE CLEARコマンドを実行する前に既存のログ・ファイルをOracle ASMから削除します。

      ステップ5で問い合せたV$LOGFILEビューのGROUP#列に、クリアする必要があるログ・グループのREDOログ・グループ識別子が示されます。個別にALTER DATABASE CLEARコマンドを使用して、各REDOログ・グループを消去します。

      たとえば、次のコマンドで識別子2を持つREDOログ・グループをクリアします。

      SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2;
      
    • ALTER DATABASE RENAME FILEコマンドを使用して、REDOログ・ファイルの名前を変更します。個別のコマンドを使用して、ステップ5で示された各ログ・ファイルの名前を変更します。

      ログ・ファイルを名前を変更するには、STANDBY_FILE_MANAGEMENT初期化パラメータをMANUALに設定する必要があります。ソース・データベースとOracle Data Guardレプリカで、オンラインREDOログ・ファイルとスタンバイREDOログ・ファイルの数が同じ場合、ログ・ファイルの名前を変更することをお薦めします。

  10. RMAN RECOVER....FROM SERVICEを使用して、データ・ファイルを最新状態にロール・フォワードします。
    この操作には追加の領域は必要ありません。このプロセスではファイルは最新状態にしかリフレッシュできません。それよりも前の時点にファイルをリフレッシュすることはできません。ステップ3で作成したTNSエントリを使用して、RMAN経由でターゲットとしてOracle Data Guardレプリカに接続します。指定されるサービスはプライマリを指す必要があります。
    RMAN> recover database noredo from service SOURCEMASTER;
    
  11. Oracle Data GuardレプリカへのREDO送信を有効にし、REDOの適用を開始します。
    これは、ステップ10の中で適用したブロックで制御ファイルを更新するために必要です。
    DGMGRL> edit database TESTMASTER set property logshipping=ON;
    Property "logshipping" updated
    DGMGRL> edit database TESTMASTER set state=apply-on;
    Succeeded.
    
  12. REDOが適用されたら、Oracle Data Guardレプリカをテスト・マスター・データベースに変換するために使用したプロセスを繰り返して、Exadataデータベース・スナップショットを作成します。
    忘れずにスタンバイでログの移動とREDOの適用を再び無効にしてください。