リカバリ・アプライアンスからのデータベース複製

保護されたデータベースを複製してスタンバイ・データベースを作成したり、保護されたデータベースをターゲット・ホストにクローニングする必要がある場合、リカバリ・アプライアンス・カタログへの接続、およびバックアップベースの複製の使用によってそれを実行できます。カタログの使用によって、ソース・データベースに接続する必要がなくなります。スタンバイ・データベースまたはクローンの作成のどちらにも、RMAN DUPLICATEコマンドの実行が含まれます。

ノート:

DUPLICATEは、スタンバイ・データベース、開発またはテストの目的でクローン・データベースを作成するためのお薦めの方法です。クローン・データベース用に新しいDBIDが作成されるためです。

RMANの後に、保護されたデータベースを新しいホストにリストアする必要がある場合は、同じDBIDを保持する新しいホスト・プロシージャにリストアおよびリカバリします。OPEN RESETLOGSを実行する前にカタログから切断するか、SQL Plusを使用してデータベースをオープンする必要があります。

関連項目:

保護されたデータベースのスタンバイ・データベースの作成

リカバリ・アプライアンスからスタンバイ・データベースを作成するとき、スタンバイ(補助インスタンス)およびリカバリ・アプライアンス・カタログに接続し、FOR STANDBYオプションを指定してRMAN DUPLICATEコマンドを実行します。

ノート:

プライマリ・データベースはすでにリカバリ・アプライアンス・カタログに登録されているため、スタンバイ・データベースをリカバリ・アプライアンス・カタログに登録しないでください。

保護されたデータベースのスタンバイ・データベースを作成するには:

  1. ターゲット・ホストで、次のタスクを実行して補助インスタンスを準備します。
    • スタンバイ・データベース・ファイルを格納するディレクトリを作成します。

    • 補助インスタンス用の初期化パラメータ・ファイルを作成します。

      必須パラメータは、DB_NAMEおよびDB_CREATE_FILE_DESTです。

    • 補助データベース用のパスワード・ファイルを作成します。このパスワード・ファイルは、ステップ3の複製操作中に上書きされます。

    • 保護されたデータベースと補助インスタンス間のOracle Net接続を確立します。

    • 補助インスタンスをNOMOUNTモードで起動します。

  2. RMANを起動し、CATALOGとしてリカバリ・アプライアンス・カタログに接続し、AUXILIARYとして補助インスタンスに接続します。

    次の例では、ra_rman_userは、保護されたデータベースmy_ptdbがリカバリ・アプライアンスとの認証で使用するリカバリ・アプライアンス・ユーザーです。ra1は、Oracleウォレットに構成されているターゲット・リカバリ・アプライアンスのネット・サービス名です。stdbyは、補助インスタンスのサービス名です。

    %rman
    RMAN> CONNECT CATALOG ra_rman_user@ra1;
    RMAN> CONNECT AUXILIARY "sys@stdby AS SYSDBA";
    
  3. DUPLICATEコマンドを使用してスタンバイ・データベースを作成します。リカバリ・アプライアンス・バックアップ・モジュールに対応する1つ以上の補助チャネルを構成します。

    次の例では、3つの補助チャネルを構成し、保護されたデータベースmy_ptdbのスタンバイ・データベースを作成します。

    RUN
    {
       ALLOCATE AUXILIARY CHANNEL c1 DEVICE TYPE sbt_tape 
         PARMS='SBT_LIBRARY=/u01/oracle/product/12.1.0.2/dbhome_1/lib/libra.so,
         ENV=(RA_WALLET=location=file:/u01/oracle/product/12.1.0.2/dbhome_1/dbs/ra
         credential_alias=ra-scan:1521/zdlra5:dedicated)' FORMAT'%U_%d';
      ALLOCATE AUXILIARY CHANNEL c2 DEVICE TYPE sbt_tape 
         PARMS='SBT_LIBRARY=/u01/oracle/product/12.1.0.2/dbhome_1/lib/libra.so,
         ENV=(RA_WALLET=location=file:/u01/oracle/product/12.1.0.2/dbhome_1/dbs/ra
         credential_alias=ra-scan:1521/zdlra5:dedicated)' FORMAT'%U_%d';
      ALLOCATE AUXILIARY CHANNEL c3 DEVICE TYPE sbt_tape 
         PARMS='SBT_LIBRARY=/u01/oracle/product/12.1.0.2/dbhome_1/lib/libra.so,
         ENV=(RA_WALLET=location=file:/u01/oracle/product/12.1.0.2/dbhome_1/dbs/ra
         credential_alias=ra-scan:1521/zdlra5:dedicated)' FORMAT'%U_%d';
      DUPLICATE DATABASE my_ptdb FOR STANDBY DORECOVER;
    }
    

保護されたデータベースのクローニング

バックアップベースの複製を使用して、保護されたデータベースをターゲット・ホストにクローニングできます。Oracleが推奨する方法(この項で説明します)では、リカバリ・アプライアンス・カタログに接続します。複製操作にカタログを使用することによって、ソース・データベースへの接続が不要になります。

次の例には、保護されたデータベースをクローニングするOracleのベスト・プラクティスが示され、シナリオにあわせてカスタマイズできるサンプル・スクリプトが含まれています。

この例では、次のことを想定しています。
  • ターゲット・データベースのバックアップがリカバリ・アプライアンスに存在し、補助インスタンスで使用できる。

  • 補助データベースから、ターゲット・データベースのメタデータおよびバックアップを含むリカバリ・アプライアンスへのRMAN接続を使用できる。

  • ソース・データベースと複製データベースの両方で、Oracle Managed Files (OMF)を使用している。

  • オペレーティング・システムにLinuxまたはUNIXが使用されている。

  • 補助データベースのホストに監査ディレクトリが作成されている。

  • バックアップベースの複製の要件が満たされている。

この例に示されているスクリプトは次のタスクを実行します。
  • 既存の補助データベースを削除する

  • ターゲット・データベースをバックアップする

  • ダミーの補助インスタンスを作成し、NOMOUNTモードでオープンする

  • リカバリ・アプライアンスで使用できるターゲット・データベースのバックアップとメタデータを使用して、ターゲット・データベースを複製する

    複製データベースの制御ファイルは+REDO/ORACLE_SID/CONTROLFILE/cf3.ctlとして保存され、データファイルは+DATAディレクトリ内に保存されます。

  • 必要なオブジェクトが複製データベース内に作成されていることを確認する。

ターゲット接続なしでバックアップベースの複製を使用して保護されたデータベースをクローニングするには:

  1. 補助インスタンスのパラメータ・ファイル(pfile)を作成します。pfileにはDB_NAME初期化パラメータのみが含まれ、複製データベースのSIDに設定されます。

    /home/oracleディレクトリにあるinit_dup.oraという名前の次のpfileは、DB_NAMEパラメータを設定します。dup_dbを複製データベースのSIDに置き換えます。

    *.db_name = 'dup_db'
  2. テキスト・エディタを使用して、次に示す内容に次の変更を加えてシェル・スクリプトを作成します(この例ではdup_db.shという名前)。
    • ORACLE_HOME変数の値を補助インスタンスのOracleホーム・ディレクトリと置き換えます。

    • logdir変数の値を、ログ・ファイルを保存するディレクトリに置き換えます。

    • 次のプレースホルダ(イタリック体で表示)を、目的の複製シナリオに合わせた値に置き換えます。

      dup_db: 補助インスタンスのシステム識別子(SID)とサービス名

      tgt_db: ターゲット・データベースのSIDとサービス名

      sys_pswd: ターゲット・データベースのSYSユーザーのパスワード

      vpc_user: VPCユーザーの名前

      vpc_user_pswd: VPCユーザーvpc_userのパスワード

      ra_scan: リカバリ・アプライアンスの単一クライアント・アクセス名(SCAN)

      ra_servicename: リカバリ・アプライアンスのメタデータ・データベースのサービス名

      system_pswd: ターゲット・データベースのSYSTEMユーザーのパスワード

    • +REDO/ORACLE_SID/CONTROLFILE/cf3.ctlとは異なる名前と場所を使用して、複製データベースの制御ファイルを保存する場合は、dup_aux_db関数のcontrol_filesの値を自分の複製シナリオに適した値に置き換えます。

    • 複製データファイルを+DATAとは異なるディレクトリに保存する場合は、dup_aux_db関数のdb_create_file_destの値を自分の複製シナリオに適した値に置き換えます。

    #!/bin/bash
    export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_2
    export ORACLE_BASE=/uo1/app/oracle
    export ORACLE_SID=dup_db
    export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/Opatch
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib;
    export LD_LIBRARY_PATH
    export logdir=/home/oracle/log
    export dt='date +%y%m%d%H%M%S'
    export NLS_DATE_FORMAT='DD-MM-YYYY HH24:MI:SS'
    
    function drop_aux_db {
    export ORACLE_SID=dup_db
    $ORACLE_HOME/bin/sqlplus -s '/ as sysdba' <<EOF2
    set pagesize 999 linesize 999 heading off feedback off
    select name, open_mode from v\$database;
    shutdown immediate;
    startup mount exclusive restrict;
    drop database;
    exit;
    EOF2
    }
    
    echo "Backup the target database"
    function backup_source_db {
    $ORACLE_HOME/bin/rman target sys/sys_pswd@tgt_db catalog
    vpc_user/vpc_user_pswd@ra_scan:1521/ra_serivcename:dedicated <<EOF
    RUN {
    backup as backupset cumulative incremental level 1 database include current
    controlfile plus archivelog not backed up delete input;}
    exit;
    EOF
    }
    
    sleep 120
    
    echo "List the backup of the target database"
    function check_source_db_backup {
    $ORACLE_HOME/bin/rman target sys/sys_pswd@tgt_db catalog vpc_user/vpc_user_pswd@ra_scan:1521/ra_serivcename:dedicated <<EOF
    LIST BACKUP OF DATABASE COMPLETED AFTER '(SYSDATE-1/24)';
    EOF
    }
    
    echo "Start the auxiliary database in FORCE NOMOUNT mode"
    function nomount_aux_db {
    export ORACLE_SID=dup_db
    $ORACLE_HOME/bin/rman target / <<EOF2
    startup force nomount pfile='/home/oracle/init_dup.ora';
    exit;
    EOF2
    }
    
    echo "Duplicate the target database"
    function dup_aux_db {
    export ORACLE_SID=dup_db
    $ORACLE_HOME/bin/rman catalog vpc_user/vpc_user_pswd@ra_scan:1521/ra_serivcename:dedicated AUXILIARY /
    <<EOF
    duplicate database tgt_db to dup_db spfile
    set control_files '+REDO/${ORACLE_SID}/CONTROLFILE/cf3.ctl'
    set db_create_file_dest '+DATA/' ;
    exit;
    EOF
    }
    
    echo "Check schema objects on the target"
    function check_source_db {
    $ORACLE_HOME/bin/sqlplus -s system/system_pswd@tgt_db <<EOF2
    set pagesize 999 linesize 999 heading off feedback off
    select name, open_mode from v\$database;
    select table_name, num_rows from dba_tables where owner='SOE';
    exit;
    EOF2
    }
    
    echo "Check schema objects on the auxiliary"
    function check_aux_db {
    export ORACLE_SID=dup_db
    $ORACLE_HOME/bin/sqlplus -s '/ as sysdba' <<EOF2
    set pagesize 999 linesize 999 heading off feedback off
    select name, open_mode from v\$database;
    select table_name, num_rows from dba_tables where owner='SOE';
    exit;
    EOF2
    }
    
    drop_aux_db
    backup_source_db
    check_source_db_backup
    nomount_aux_db
    dup_aux_db
    check_source_db
    check_aux_db
    
  3. chmodコマンドを使用して、スクリプトdup_db.shの実行権限を設定します。
    $ chmod +x dup_db.sh
  4. 複製ホスト上で(複製データベースをホストする)、dup_db.shスクリプトを実行します。

    次のコマンドは、/home/my_scripts/duplicationディレクトリに保存されているdup_db.shスクリプトを実行します。

    $ ./home/my_scripts/duplication/dup_db.sh