9.7.7.1 タスク1: スタンバイ・データベースをスパース・テスト・マスターとして使用するための準備

スタンバイ・データベースの既存のファイルは、スナップショットのサポートに使用されます。スタンバイの既存のファイルを指す一連のスパース・ファイルを作成します。プライマリ・データベースから受信したREDOが、これらのファイルに適用されます。これらのスパース・ファイルにより、スタンバイ・データベースをスパース・テスト・マスターとして使用できるようになり、また、プライマリ・データベースを最新に保つことができます。

  1. スタンバイでREDO適用を停止します。

    サポート・ファイルを作成してスナップショットを作成するためにデータベースの構造を静止状態にするには、スタンバイ・データベースでREDO適用をオフにする必要があります。

    DGMGRL> edit database tm_standby set state='APPLY-OFF';
  2. 現在のスタンバイ・データベースをテスト・マスターとして使用する準備をします。
    システムは次のように構成する必要があります。
    1. データベース・ファイルが含まれているディスク・グループは、access_control.enabled属性をTRUEに設定する必要があります。

      SYSASMとして、SQL*Plusを使用してOracle ASMにログインし、ディスク・グループを構成します。

      次に例を示します:

      SQL> alter diskgroup DATA set attribute 'ACCESS_CONTROL.ENABLED'='TRUE';
    2. データベース所有者のオペレーティング・システム(OS)ユーザーは、データベース・ファイルが含まれているディスク・グループの明示的なユーザーとして追加する必要があります。

      次に例を示します:

      SQL> alter diskgroup DATA add user 'scott';
    3. 使用するデータベース・ファイルは、データベース所有者のOSユーザーに明示的な権限が付与されている必要があります。

      このステップは、これらのファイルを使用してスナップショットを作成するすべてのOSユーザーと、スナップショットで参照されるすべてのファイルに対して実行する必要があります。

      次のスクリプトを使用すると、所有権の設定を構成するためのSQL文を作成できます。SQL*Plusを使用して、スタンバイ・データベースに接続中にこのスクリプトを実行します。スタンバイがコンテナ・データベース(CDB)の場合は、cdb$rootコンテナに接続する必要があります。

      set newpage 0
      set linesize 999
      set pagesize 0
      set feedback offset heading off
      set echo off
      set space 0
      set tab off
      set trimspool on
      spool set_owner.sql
      select 'ALTER DISKGROUP DATA set ownership owner='||''''||'scott'||''''||' 
       for file '||''''||name||''''||';' from v$datafile;
      exit

      前述のスクリプトの実行後、SYSASMユーザーとしてSQL*Plusを使用してOracle ASMにログインし、set_owner.sqlのコマンドを実行します。

      SQL> @set_owner
  3. 制御ファイルのバックアップを作成します。

    すべてのスナップショットは、スタンバイ・データベースの現在の状態を使用して作成されるため、スタンバイを構成するすべてのファイルを把握する必要があります。制御ファイルのバイナリ・バックアップを作成し、追加のスナップショットに必要なCREATE CONTROLFILEスクリプトを今後作成できるようにします。

    SQL> ALTER DATABASE BACKUP CONTROLFILE TO '/home/oracle/snap_tm/control_tm.ctl';
  4. rename_files.sqlスクリプトを作成し、スナップショットのスパース・データ・ファイルを作成します。

    このスクリプトは、スナップショットで使用するスパース・データ・ファイルを作成するための一連のRENAME文を作成し、プライマリから受信したREDOを適用します。次のようなSQL文を使用します。この文は元のファイルと同じディレクトリ構造を使用しますが、ファイルはSPARSEディスク・グループに作成されることに注意してください。新しいファイル名は、'.' (ピリオド)を'_' (アンダースコア)に置換することで作成されます。

    set newpage 0
    set linesize 999
    set pagesize 0
    set feedback off
    set heading off
    set echo offset space 0
    set tab off
    set trimspool on
    spool rename_files.sql
    select 'EXECUTE dbms_dnfs.clonedb_renamefile ('||''''||name||''''||
    ','||''''||replace(replace(name,'.','_'),'DATA/','SPARSE/')||''''||
    ');' from v$datafile;
    exit

    このスクリプトでは、次のような出力が生成されます。

    EXECUTE dbms_dnfs.clonedb_renamefile ('+DATA/TM_STANDBY/DATAFILE/system.515.9304
    75939','+SPARSE/TM_STANDBY/DATAFILE/system_515_930475939');
    
    EXECUTE dbms_dnfs.clonedb_renamefile ('+DATA/TM_STANDBY/429CE0836E0166ACE05382C8
    E50A1154/DATAFILE/system.567.930475945','+SPARSE/TM_STANDBY/429CE0836E0166ACE053
    82C8E50A1154/DATAFILE/system_567_930475945');
    
    EXECUTE dbms_dnfs.clonedb_renamefile ('+DATA/TM_STANDBY/DATAFILE/sysaux.571.9304
    75939','+SPARSE/TM_STANDBY/DATAFILE/sysaux_571_930475939');
    
    EXECUTE dbms_dnfs.clonedb_renamefile ('+DATA/TM_STANDBY/429CE0836E0166ACE05382C8
    E50A1154/DATAFILE/sysaux.516.930475945','+SPARSE/TM_STANDBY/429CE0836E0166ACE053
    82C8E50A1154/DATAFILE/sysaux_516_930475945');
    
    EXECUTE dbms_dnfs.clonedb_renamefile ('+DATA/TM_STANDBY/DATAFILE/undotbs1.497.93
    0475939','+SPARSE/TM_STANDBY/DATAFILE/undotbs1_497_930475939');
    
    EXECUTE dbms_dnfs.clonedb_renamefile ('+DATA/TM_STANDBY/429CE0836E0166ACE05382C8
    E50A1154/DATAFILE/undotbs1.564.930475945','+SPARSE/TM_STANDBY/429CE0836E0166ACE0
    5382C8E50A1154/DATAFILE/undotbs1_564_930475945');
  5. ASMCMDを使用して、スクリプトrename_files.sqlで識別されたすべてのディレクトリに対してディレクトリを作成します。

    dbms_dnfs.clonedb_renamefileファンクションを実行する場合は、ファイルに使用されるすべてのディレクトリ構造がすでにASMに存在している必要があります。

    前のステップの出力を使用して必要な構造を特定し、必要に応じてこれを作成します。次の例のように、ASMCMDを使用してディレクトリを作成できます。

    cd ASMCMD [+] > cd sparse
    ASMCMD [+sparse] > ls
    ASMCMD [+sparse] > mkdir tm_standby
    ASMCMD [+sparse] > cd tm_standby
    ASMCMD [+sparse/tm_standby] > mkdir datafile
    ASMCMD [+sparse/tm_standby] > mkdir 429DC0E1BCBD1B90E05382C8E50A8E80
    ASMCMD [+sparse/tm_standby] > mkdir 429CE0836E0166ACE05382C8E50A1154
    ASMCMD [+sparse/tm_standby] > cd 429DC0E1BCBD1B90E05382C8E50A8E80
    ASMCMD [+sparse/tm_standby/429DC0E1BCBD1B90E05382C8E50A8E80] > mkdir datafile
    ASMCMD [+sparse/tm_standby/429DC0E1BCBD1B90E05382C8E50A8E80] > cd ../429CE0836E0166ACE05382C8E50A1154
    ASMCMD [+sparse/tm_standby/429CE0836E0166ACE05382C8E50A1154] > mkdir datafile