9.7.4.2 フル・データベースのスナップショットの作成

フル・データベースのExadataスナップショットを作成します。

次の図は、Exadataテスト・マスター・データベースおよびスナップショット・データベースのライフサイクルを示しています。ここでは、テスト・マスターはOracle Data Guardレプリカに基づいています。

図9-13 テスト・マスター・データベースおよびスナップショット・データベースのライフサイクル

図9-13の説明が続きます
「図9-13 テスト・マスター・データベースおよびスナップショット・データベースのライフサイクル」の説明

テスト・マスター・データベースは、高可用性または障害時リカバリを提供するフェイルオーバー・ターゲットとして使用できないことに注意してください(Data Guard構成は、別の目的に使用される複数のレプリカを含むことができます)。テスト・マスターPDBと似ていますが、テスト・マスター・データベースは、対応するExadataスナップショットが存在している場合は変更できません。

テスト・マスター・データベースとして、リカバリ・モードの読取り専用スタンバイ・データベース(たとえばリアル・タイム適用のActive Data Guard)を使用することはできません。

テスト・マスター・データベースと対応するExadataスナップショットは、同じOracle ASMクラスタ環境に存在する必要があります。

ノート:

テスト・マスターがOracle RACデータベースの場合は、次のいずれかを実行する必要があります。

  • スパース・クローン用にCREATE CONTROLFILE文ですべてのスレッドのREDOログを作成します。または
  • スパース・クローンのSPFILEにあるONLINE_LOG_CREATE_DEST_1初期化パラメータを使用して、REDOログにOracle Managed Filesを指定して、REDOログが自動作成されるようにします。
  1. テスト・マスター・データベースで、トレースする既存の制御ファイルをバックアップすることにより、Exadataスナップショット・データベース用のサンプル制御ファイル・スクリプトを作成します。

    SYSDBAとしてSQL*Plusからテスト・マスター・データベースに接続し、次を実行します。

    1. セッションで生成されるすべてのトレース・ファイルの名前と場所を調べます。

      次に例を示します:

      SQL> SELECT value FROM v$diag_info WHERE name = 'Default Trace File';
      
      VALUE
      ---------------------------------------------------------------------------------
      /u01/app/oracle/diag/rdbms/TESTMASTER/TESTMASTER1/trace/TESTMASTER1_ora_26756.trc
    2. BACKUP CONTROLFILE TO TRACEコマンドを実行し、CREATE CONTROLFILEコマンドをトレース・ファイルに含めます。
      SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
    3. デフォルト・トレース・ファイルとして示されるファイルを取得します。
  2. テスト・マスター・データベースで、名前を変更するステップ(ステップ11で実行)のために既存のファイル名を判別します。

    たとえば、SYSDBAとしてSQL*Plusにログインし、次のように実行します。

    SET newpage 0
    SET linesize 999
    SET pagesize 0
    SET feedback off
    SET heading off
    SET echo off
    SET space 0
    SET tab off
    SET trimspool on
    SPOOL rename_files.sql
    SELECT 'EXECUTE dbms_dnfs.clonedb_renamefile -
    ('||''''||name||''''||','||''''||REPLACE(REPLACE(REPLACE(name,'.','_'),-
    'TESTMASTER','SNAPTEST'),'+DATA','+SPARSE')||''''||');' FROM v$datafile;
    EXIT

    このサンプル・スクリプトにより、rename_files.sqlというファイルが作成されます。このファイルには、次のようなデータ・ファイルごとの文が含まれています。

    EXECUTE dbms_dnfs.clonedb_renamefile (
    '+DATA/TESTMASTER/DATAFILE/system.257.865863315',
    '+SPARSE/SNAPTEST/DATAFILE/system_257_865863315');
    

    サンプル・スクリプトのREPLACEファンクションは、次のように作用します。

    • 元のファイル名に含まれるピリオドをアンダースコアに置換

    • 元のデータベース名のTESTMASTERSNAPTESTに置換

    • 元のディスク・グループ名の+DATA+SPARSEに置換

    このサンプルを目的の環境にあわせて変更する場合は、残りのすべての手順で矛盾が発生しないようにしてください。

  3. テスト・マスターのSPFILEの内容を含むinit.oraファイルを作成します。
    SQL> CREATE PFILE = 'init_TestMaster.ora' FROM SPFILE;
  4. テスト・マスターを停止します。
    SQL> shutdown;
  5. Exadataスナップショット・データベースのinit.oraファイルを作成します。

    テスト・マスターのinit.oraファイルをテンプレートとして使用できますが、db_nameおよびcontrol_filesエントリを必ず変更してください。

    この手順では、Exadataスナップショット・データベースのinit.oraファイルは、コマンドおよび例でsnap_init.oraとして参照されます。

    $ cp init_TestMaster.ora snap_init.ora

    たとえば、snap_init.oraを次のように新しいデータベース名、新しい制御ファイルおよび監査ファイルの宛先で変更します。

    db_name = SNAPTEST
    control_files = '+DATA/SNAPTEST/control1.f'
    audit_file_dest=/u01/app/oracle/admin/snaptest/adump

    変更したsnap_init.oraファイルは、テスト・マスターの追加のスナップショット・コピーを作成するためのテンプレートとして保存できます。

  6. Exadataスナップショット・データベースの制御ファイルを作成するスクリプトを作成します。
    このスクリプトは、ステップ10で使用します。
    1. ステップ1で生成されたトレース・ファイルを調べて、RESETLOGS句を含むCREATE CONTROLFILEコマンドを特定します。

      トレース・ファイルの次のコメントの直後に必要なコマンドがあります。

      --     Set #2. RESETLOGS case
      -- 
      -- The following commands will create a new control file and use it
      -- to open the database.
      -- Data used by Recovery Manager will be lost.
      -- The contents of online logs will be lost and all backups will
      -- be invalidated. Use this only if online logs are damaged.
    2. CREATE CONTROLFILEコマンドを新しいスクリプト・ファイルにコピーします。

      完全なCREATE CONTROLFILEコマンドのみをコピーし、前後のコメントおよびコマンドをすべて破棄します。

      たとえば、このスクリプト・ファイルにcrt_ctlfile.sqlという名前を付けることができます。

    3. CREATE CONTROLFILEコマンドを変更して、Exadataスナップショット・データベースの制御ファイルを作成します。

      制御ファイルは、Exadataスナップショット・データベース名、新しいログ・ファイル名、およびテスト・マスターのデータ・ファイル名を使用して作成してください。新しいログ・ファイルは、十分な領域がある任意のディスク・グループに格納できますが、スパースOracle ASMディスク・グループ内に作成することはできません。

      次に、CREATE CONTROLFILEコマンドの例を示します。この例では、SNAPTESTがExadataスナップショット・データベースです。LOGFILE行は新しいログ・ファイルの場所を指定し、DATAFILE行はテスト・マスター・データベースのデータ・ファイルの場所を指定します。

      CREATE CONTROLFILE REUSE SET DATABASE SNAPTEST RESETLOGS ARCHIVELOG
            MAXLOGFILES 32 
            MAXLOGMEMBERS 2 
            MAXINSTANCES 1 
            MAXLOGHISTORY 908 
        LOGFILE 
            GROUP 1 '+DATA/SNAPTEST/t_log1.f' SIZE 100M BLOCKSIZE 512,
            GROUP 2 '+DATA/SNAPTEST/t_log2.f' SIZE 100M BLOCKSIZE 512
        DATAFILE
            '+DATA/TESTMASTER/DATAFILE/system.257.865863315',
            '+DATA/TESTMASTER/DATAFILE/sysaux.258.865863317',
            '+DATA/TESTMASTER/DATAFILE/sysext.259.865863317',
            '+DATA/TESTMASTER/DATAFILE/tbs_1.256.865863315'
        CHARACTER SET WE8DEC; 
      

    変更したスクリプト・ファイルは、テスト・マスターの追加のスナップショット・コピーを作成するためのテンプレートとして保存できます。

  7. スナップショットが動作するすべてのノードにaudit_file_destディレクトリを作成します。
    $ mkdir -p /u01/app/oracle/admin/snaptest/adump
  8. Oracle ASMにスナップショット・データ・ファイルのディレクトリを作成します。

    次に例を示します:

    $ asmcmd -p 
    ASMCMD > cd +SPARSE 
    ASMCMD [+sparse] > mkdir SNAPTEST 
    ASMCMD [+sparse] > cd SNAPTEST 
    ASMCMD [+sparse/snaptest] > mkdir DATAFILE

    テスト・マスターがコンテナ・データベース(CDB)の場合は、プラガブル・データベース(PDB)ごとに追加のデータファイル・サブディレクトリを作成します。それぞれのPDBのグローバル一意識別子(GUID)を使用します。この識別子は、V$PDBSビューから得られます。

    次に例を示します:

    $ sqlplus / as sysdba
    SQL> ALTER SESSION set container=PDB1;
    SQL> SELECT guid FROM v$pdbs;
    
                                GUID
    –-------------------------------
    A839E00B5E9E7820E053412E850A5F18
    $ asmcmd -p 
    ASMCMD > cd +SPARSE 
    ASMCMD > cd +SPARSE/SNAPTEST 
    ASMCMD [+sparse/snaptest] > mkdir A839E00B5E9E7820E053412E850A5F18
    ASMCMD [+sparse/snaptest] > cd A839E00B5E9E7820E053412E850A5F18
    ASMCMD [+sparse/snaptest/A839E00B5E9E7820E053412E850A5F18] > mkdir DATAFILE
  9. 次のコマンドを使用し、Exadataスナップショット・データベースのinit.oraファイル(snap_init.ora)を指定してデータベース・インスタンスを起動します。
    $ sqlplus / as sysdba
    SQL> startup nomount pfile=snap_init.ora
    
  10. ステップ6で作成されたスクリプトを使用してExadataスナップショット制御ファイルを作成します。

    次の例ではスクリプトの名前はcrt_ctlfile.sqlです。

    SQL> @crt_ctlfile
    
  11. ステップ2で変更したスクリプトを実行します。

    Exadataスナップショット・データベースを開く前に、すべてのファイルの名前を変更する必要があります。

    SQL*Plusを使用してSYSDBAとしてExadataスナップショット・データベースに接続し、次のコマンドを実行します。

    SQL> @rename_files
    

    このスクリプトは、Oracle ASMに格納されたテスト・マスター・データベース・ファイルの権限を変更し、READONLYとしてマークします。

    dbms_dnfs.clonedb_renamefileプロシージャ(rename_files.sqlによって呼び出される)は、テスト・マスター・データベースとスナップショット・データベースの間の親子関係を設定し、スナップショット・データベースの制御ファイル内のファイル名を変更します。

  12. RESETLOGSオプションを指定してExadataスナップショット・データベースを開きます。
    SQL> ALTER DATABASE OPEN RESETLOGS;
    
  13. Exadataスナップショット・ファイルがテスト・マスター・データベースの子ファイルであることを確認します。SQL*Plusを使用して、ExadataスナップショットにSYSDBAとして接続し、次のコマンドを実行します。
    SQL> SELECT filenumber num, clonefilename child, snapshotfilename parent
    FROM V$CLONEDFILE;
    

    問い合わせの出力例を、次に示します。

    NUM  CHILD                                        
    ---- ---------------------------------------------
    PARENT 
    -----------------
    1     +SPARSE/SNAPTEST/DATAFILE/system_257_865863315
    +DATA/TESTMASTER/DATAFILE/system.257.865863315
    
    2     +SPARSE/SNAPTEST/DATAFILE/sysaux_258_865863317
    +DATA/TESTMASTER/DATAFILE/sysaux.258.865863317
    
    3     +SPARSE/SNAPTEST/DATAFILE/sysext_259_865863317
    +DATA/TESTMASTER/DATAFILE/sysext.259.865863317
    
    4     +SPARSE/SNAPTEST/DATAFILE/tbs_1_256_865863315
     +DATA/TESTMASTER/DATAFILE/tbs_1.256.865863315 
  14. SQL*Plusを使用してExadataスナップショット・データベースにログインし、TEMP表領域に一時ファイルを追加します。これは、スパースではなく、フル・サイズの一時ファイルです。
    SQL> ALTER TABLESPACE temp ADD TEMPFILE '+DATA' SIZE 10G;
    

    さらに、完全なCDBのスナップショットの場合は、各PDBに接続して、PDB固有のTEMP表領域に一時ファイルを追加します。

    次に例を示します:

    SQL> ALTER SESSION set container=PDB1;
    SQL> ALTER TABLESPACE temp ADD TEMPFILE '+DATA' SIZE 10G;