RMAN増分バックアップを使用したM5クロスエンディアンXTTSを使用したOracle DatabaseのOCIへの移行

はじめに

このチュートリアルでは、M5 Cross Endian Platform Migration with Full Transportable Data Pump and RMAN増分バックアップを使用して、Oracle DatabaseをOracle Cloud Infrastructure (OCI)に移行する方法について説明します。

この方法では、アプリケーションの停止時間を最小限に抑えながら、エンディアン形式が異なるシステム間で移行できます。

プロセスは、ソースから宛先への完全バックアップ・コピーから始まります。その後、増分バックアップが適用され、宛先がソースとほぼ同期されます。停止時間は、最終的な増分バックアップおよびメタデータのエクスポート/インポート中にのみ必要です。

環境詳細

目的

前提条件

タスク1: ソース・データベースの準備

  1. 次の問合せを実行して、ソース・データベースのエンディアン形式を確認します。

    col PLATFORM_NAME for a50
    select platform_name, platform_id, endian_format from v$transportable_platform;
    
  2. 転送されるソース・データベース内の表領域を特定します。すべての表領域を移行する場合は、次の問合せを実行します。

    select tablespace_name from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  3. トランスポート・セット違反を確認します。

    exec dbms_tts.transport_set_check('<comma-separated tablespace list>');
    SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
    
  4. (オプション)ソース・データベースでブロック・チェンジ・トラッキングを有効にして、増分バックアップのパフォーマンスを向上させます。

  5. ソース・データベースですべての表領域がオンラインであることを確認します。

タスク2: ターゲット・データベースを準備する

  1. 新しいユーザー表領域を作成します。

    select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME='USERS_OCI';
    select TABLESPACE_NAME from dba_tablespaces order by 1;
    set long 99999
    SELECT DBMS_METADATA.GET_DDL ('TABLESPACE','USERS') from dual;
    

    前述のデータ定義言語(DDL)出力を使用して、次のようにディスク・グループ名を置き換え、新しいユーザー表領域を作成します。

    CREATE BIGFILE TABLESPACE USERS_OCI DATAFILE '+DATAC2'
    SIZE 1073741824
    AUTOEXTEND ON NEXT 17179869184 MAXSIZE 33554431M
    LOGGING ONLINE PERMANENT BLOCKSIZE 8192
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE
    ENCRYPTION USING 'AES256' ENCRYPT DEFAULT
    NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO;
    

    次の問合せを使用して、デフォルト表領域USERSを持つすべてのデータベース・ユーザーに新しいユーザー表領域USERS_OCIを割り当てます。

    select 'alter user '||username||' default tablespace USERS_OCI;' from dba_users where default_tablespace='USERS';
    

    新規ユーザー表領域の再割当て後に、前述のSELECT問合せの出力で0が返される必要があります。

    select count(*) from dba_users where default_tablespace='USERS';
    ALTER DATABASE DEFAULT TABLESPACE USERS_OCI;
    drop tablespace users including contents and datafiles;
    select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME='USERS';
    
  2. ターゲット・データベースに一時表領域を作成します。ソースに対して次の問合せを実行し、表領域の詳細を収集します。

    ソースで次の問合せを実行します。

    select TABLESPACE_NAME from dba_tablespaces where CONTENTS='TEMPORARY';
    

    次に、ターゲット・データベースに一時表領域を作成します。たとえば:

    create bigfile temporary tablespace USER_TEMP tempfile size 672m autoextend on next 672m extent management local;
    

タスク3: 増分M5 XTTSステップ

タスク3.1: 初期フェーズ

  1. 最新のM5スクリプトをダウンロードして解凍します: M5 Cross Endian Platform Migration using Full Transportable Data Pump Export/Import and RMAN Incremental Backups (Doc ID 2999157.1). ソースと宛先の間で共有されるNFS共有に作業ディレクトリを作成します。NFS共有へのパスは、ソースと宛先の両方で同一である必要があります。

    NFS共有が不可能な場合は、任意のローカル記憶域を使用します。ソース・ホストにディレクトリを作成し、宛先ホストにコピーします。これは、プロセス全体で複数回繰り返す必要があります。ソース・ホストと宛先ホストのパスは同一である必要があります。そうでない場合は、この手順の範囲外のスクリプトにさまざまな変更が必要になります。

    mkdir -p <Shared_location>/XTTS_Migration
    mkdir -p <Shared_location>/XTTS_Migration/Backup
    mkdir -p <Shared_location>/XTTS_Migration/DPPUMP
    cd <Shared_location>
    unzip DBMIG.zip
    

    ファイルには、次が含まれています。

    • dbmig_driver_m5.sh: 移行ドライバ・スクリプト。
    • impdp.sh: ドライバ・スクリプトをインポートします。
    • logディレクトリ: 実行時に作成されます。RMANバックアップ・ログ、移行ログおよび追加のログを格納します。
      • rman_mig_bkp.log: 一元化された移行ログ・ファイル。
      • rman_mig_bkp.lck: ドライバの同時実行を防ぐために、すべてのバックアップの最初に作成されたロック・ファイル。ドライバの実行が中止された場合、ロックは削除されません。この問題は、ロックを解除する前に調査して解決する必要があります。
    • cmdディレクトリ: 実行時に作成されます。RMANのバックアップ・スクリプトおよびリストア・スクリプトを格納します。
      • dbmig_driver.properties: 環境変数。
      • dbmig_ts_list.txt: カンマ区切りの表領域リスト。
  2. 使用している環境を反映するようにdbmig_driver.propertiesの変数(cmdディレクトリ)を変更します。構成ファイルdbmig_driver.propertiesのパラメータの詳細は、「フル・トランスポータブルData Pump Export/ImportおよびRMAN増分バックアップを使用したM5 Cross Endian Platform Migration」を参照してください。

    dbmig_driver.propertiesサンプル・ファイル

    ############################################################
    #Source database properties
    #my_M5_prop_version=2
    # -
    # - ORACLE_HOME Path to Oracle Home
    # - ORACLE_SID SID of the source database
    # - SRC_SCAN Connect string to source database via SCAN.
    # If no SCAN, specify source database network name.
    # Enclose in single quotes
    # Example: '@myhost-scan/db1'
    # Example: '@localhost/pdb1'
    # - MIG_PDB Accepted values: 0, 1
    # Choose 0 if source is non-CDB
    # Choose 1 if source is a PDB
    # - PDB_NAME If source is a PDB, specify PDB name.
    # Else leave blank
    # Example: PDB1
    # - BKP_FROM_STDBY Accepted values: 0, 1
    # Choose 0 to back up from primary database,
    # or if Data Guard is not in use.
    # Choose 1 to back up from standby database.
    ############################################################
    export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
    export PATH=$PATH:$ORACLE_HOME/bin
    export ORACLE_SID=soldb1918
    export SRC_SCAN='@scan1/soldb1918'
    export MIG_PDB=0
    export PDB_NAME=
    export BKP_FROM_STDBY=0
    ############################################################
    #Source Data Pump settings
    # - SOURCE_DPDMP Directory path of the directory DATA_PUMP_DIR
    # Example: /u01/app/oracle/m5/data_pump_dir
    # - SOURCE_DPIR Data Pump Directory, typically DATA_PUMP_DIR
    # - SYSTEM_USR Username for Data Pump export.
    # Do not use SYS AS SYSDBA
    # Example: SYSTEM
    # - DP_TRACE Data Pump trace level.
    # Use 0 to disable trace.
    # Use 3FF0300 to full transportable tracing
    # See MOS Doc ID 286496.1 for details.
    # - DP_PARALLEL Data Pump parallel setting.
    # Accepted values: 1 to 999
    # Example: 16
    ############################################################
    export SOURCE_DPDMP=<Shared_location>/XTTS_Migration/DPPUMP
    export SOURCE_DPDIR=DATA_PUMP_DIR
    export SYSTEM_USR=SYSTEM
    export DP_TRACE=0
    export DP_PARALLEL=1
    export DP_ENC_PROMPT=N
    ############################################################
    #Source RMAN settings
    # - BKP_DEST_TYPE Accepted values: DISK, SBT_TAPE
    # Choose DISK to backup up to local storage
    # Choose SBT_TAPE to use ZDLRA
    # - BKP_DEST_PARM If BKP_DEST_TYPE=DISK, enter location for backup:
    # Example: /u01/app/oracle/m5/rman
    # If BKP_DEST_TYPE=SBT_TAPE, enter channel configuration:
    # Example: "'%d_%U' PARMS \"SBT_LIBRARY=<oracle_home>/lib/libra.so,SBT_PARMS=(RA_WALLET='location=file:<oracle_home>/dbs/zdlra credential_alias=<zdlra-connect-string>')\""
    # - CAT_CRED If you use RMAN catalog or ZDLRA, specify connect string to catalog database
    # Example: <scan-name>:<port>/<service>
    # - SECTION_SIZE Section size used in RMAN backups
    # - CHN Number of RMAN channels allocated
    ############################################################
    export BKP_DEST_TYPE=DISK
    export BKP_DEST_PARM=<Shared_location>/XTTS_Migration/Backup
    export CAT_CRED=
    export SECTION_SIZE=64G
    export CHN=8
    ############################################################
    #Destination host settings
    #If specified, the script transfers the RMAN backups and
    #Data Pump dump file to the destination via over SSH.
    #SSH equivalence is required.
    # - DEST_SERVER Network name of the destination server.
    # Leave blank if you manually transfer
    # backups and dump files
    # - DEST_USER User for SSH connection
    # Example: oracle
    # - DEST_WORKDIR The script working directory on destination
    # Example: /u01/app/oracle/m5
    # - DEST_DPDMP The directory path used by DATA_PUMP_DIR
    # in destination database
    # Example: /u01/app/oracle/m5/data_pump_dir
    ############################################################
    export DEST_SERVER=srvadm01
    export DEST_USER=oracle
    export DEST_WORKDIR=<Shared_location>/XTTS_Migration
    export DEST_DPDMP=<Shared_location>/XTTS_Migration/DPDUMP
    ############################################################
    #Advanced settings
    #Normally, you don't need to edit this section
    ############################################################
    export WORKDIR=$PWD
    export LOG_DIR=${WORKDIR}/log
    export CMD_DIR=${WORKDIR}/cmd
    export PATH=$PATH:$ORACLE_HOME/bin
    export DT='date +%y%m%d%H%M%S'
    export CMD_MKDIR='which mkdir'
    export CMD_TOUCH='which touch'
    export CMD_CAT='which cat'
    export CMD_RM='which rm'
    export CMD_AWK='which awk'
    export CMD_SCP='which scp'
    export CMD_CUT='which cut'
    export CMD_PLATFORM='uname'
    if [[ "$CMD_PLATFORM" = "Linux" ]]; then
    export CMD_GREP="/usr/bin/grep"
    else
    if [[ "$CMD_PLATFORM" = "AIX" ]]; then
    export CMD_GREP="/usr/bin/grep"
    else
    if [[ "$CMD_PLATFORM" = "HPUX" ]]; then
    export CMD_GREP="/usr/bin/grep"
    else
    export CMD_GREP='which ggrep'
    fi
    fi
    fi
    export my_M5_prop_version=2
    

    ソース・データベースおよびターゲット・データベースにdatapumpダンプ・ファイルのディレクトリを作成します。

    create directory M5_XTTS_MIG as '<Shared_Location>/XTTS_Migration/DPDUMP';
    grant read,write on directory M5_XTTS_MIG  to sys,system;
    

タスク3.2: レベル0のバックアップおよびリストア

  1. ソース・システムで、環境変数(ORACLE_HOMEおよびORACLE_SID)をソース・データベースに設定してOracleユーザーとしてログインし、バックアップを実行します。

    cd <Shared_location>
    nohup sh dbmig_driver_m5.sh L0 &
    
  2. 共有NFSを使用しない場合は、作業ディレクトリを宛先ホストにコピーします。

  3. データファイルを宛先システムにリストアします。

    宛先で、環境を宛先データベースに設定します。ドライバ・スクリプトによってリストア・スクリプトが作成されます。これは、cmdディレクトリに格納されます。

    cd <Shared_location>/XTTS_Migration
    cp nohup.out nohup.out_L0
    ls -ltra cmd/restore_L0_*
    rman target / cmdfile=<restore_cmdfile_name>
    

    RMANログ・ファイルを確認します。

    egrep "WARN-|ORA-" log/restore_*.log
    

タスク3.3: ロール・フォワード・フェーズ

このフェーズでは、増分バックアップがソース・データベースに作成され、宛先システムに転送されます。

バックアップは宛先エンディアン形式に変換され、宛先データファイルに適用されます。このプロセスを複数回繰り返して、宛先データベースの同期を維持できます。

各増分バックアップは前のバックアップより小さく、最終的な停止時間ウィンドウが短縮されます。

ノート:宛先に適用せずに、ソースに対して複数のバックアップを実行できます。

  1. ソースで、ソース・データベースのレベル1 (L1)増分バックアップを実行します:
   cd <Shared_location>/XTTS_Migration
   cp nohup.out nohup.out_1
   nohup sh dbmig_driver_m5.sh L1 &
  1. 共有NFSを使用しない場合は、作業ディレクトリを宛先ホストにコピーします。

  2. 増分バックアップを宛先システム上のデータファイル・コピーに適用します。宛先システムで、適切な環境変数を設定してOracleユーザーとしてログインし、次のようにデータファイルのロールフォワード・ステップを実行します。

宛先システムで、適切な環境変数が設定されたOracleユーザーとしてログインします。ドライバ・スクリプトによってリストア・スクリプトが作成されます。cmdディレクトリに格納されます。最新のリストア・スクリプトを使用して、宛先データベースでレベル1 (L1)バックアップをリストアします。

   cd <Shared_location>/XTTS_Migration
   ls -ltra cmd/restore_L1_*
   cp nohup.out nohup.out_3
   rman target / cmdfile=<restore_cmdfile_name>

RMANログ・ファイルを確認します。

   egrep "WARN-|ORA-" log/restore_*.log

ロールフォワード・ステップは、宛先データベースに接続し、転送される各表領域の表領域のデータファイルに増分バックアップを適用します。

データベース・カットオーバー・ウィンドウまでロール・フォワード・フェーズを繰り返します。

タスク3.4: 最終増分バックアップ・フェーズ

  1. インポートが完了するまで、ソースおよびターゲットで次の監査関連パラメータを無効にします。インポートの完了後に再度有効にします。
   show parameter audit_sys_operations
   show parameter audit_trail
   alter system set audit_trail=none scope=spfile sid='*';
   alter system set audit_sys_operations=FALSE scope=spfile sid='*';
   srvctl stop database -d ${ORACLE_UNQNAME}
   srvctl start database -d ${ORACLE_UNQNAME}
   show parameter audit_sys_operations
   show parameter audit_trail
  1. ソースで、ソース・データベースの最後のレベル1 (L1)増分バックアップを実行します:

スクリプトは次を実行します。- システム・パスワードの入力を求めます- 表領域を読取り専用モードに設定します- 最終増分バックアップを実行します- Data Pumpエクスポートを実行します

   cd <Shared_location>/XTTS_Migration
   cp nohup.out nohup.out_1
   nohup sh dbmig_driver_m5.sh L1F &
  1. 共有NFSを使用しない場合は、作業ディレクトリを宛先ホストにコピーします。

  2. 最終増分バックアップを宛先データファイルに適用します。

宛先で、環境を宛先データベースに設定します。ドライバ・スクリプトによってリストア・スクリプトが作成されます。これは、cmdディレクトリに格納されます。

   cd <Shared_location>/XTTS_Migration
   ls -ltra cmd/restore_L1F_*

最終的なリストア・スクリプトを使用して、宛先データベースの最終的なレベル1 (L1)バックアップをリストアします。

   cd <Shared_location>/XTTS_Migration
   cp nohup.out nohup.out_5
   nohup rman target / cmdfile=<restore_cmdfile_name> &

RMANログ・ファイルを確認します。

   egrep "WARN-|ORA-" log/restore_*.log

タスク3.5: Data Pump Import

  1. 宛先で、インポート・ドライバ・スクリプト(impdp.sh)を編集します。宛先データベースに関する情報を使用して、変数を入力します。

    • ORACLE_HOME: Oracleホームへのパス
    • ORACLE_SID: 宛先データベースのSID
    • ORACLE_CONNECT_STRING: 接続文字列
    • DATA_PUMP_PARALLEL: パラレル・レベル
    • DATA_PUMP_TRACE: トレース・レベル

インポート・ドライバ・スクリプトには、次の4つのパラメータがあります。

expdp_dumpfile: Name of the Data Pump dump file, e.g., exp_UP19_240206134155.dmp
rman_last_restore_log: Relative path to the last RMAN restore log
run-mode: One of the below:
    test: Generates the Data Pump parameter file. Does not start Data Pump.
    test-readonly. Generates the Data Pump parameter file and adds TRANSPORTABLE=KEEP_READ_ONLY to the Data Pump parameter file. Review the documentation for the usage of this parameter. Does not start Data Pump.
    run: Generates the Data Pump parameter file. Starts Data Pump to perform the import.
    run-readonly: Generates the Data Pump parameter file and adds TRANSPORTABLE=KEEP_READ_ONLY to the Data Pump parameter file. Review the documentation for the usage of this parameter. Starts Data Pump to perform the import.

  DP_ENC_PROMPT: 
     One of the below
        Y: Will prompt the user for an encryption password in case one was used for the export
        N: Will not prompt the user for an encryption password.

テスト・モードでインポート・ドライバ・スクリプトを起動して、生成されたData Pumpパラメータ・ファイルの正確性を検証します:

   cd <Shared_location>/XTTS_Migration
   sh impdp.sh <expdp_dumpfile> <rman_last_restore_log> test N

ドライバ・スクリプトは、現在のディレクトリにパラメータ・ファイルを生成します。調べます。

$ vi imp_<oracle_sid>_<timestamp>_xtts.par

生成されたData Pumpパラメータ・ファイルは変更しないでください。パラメータ・ファイルを変更する必要がある場合は、ドライバ・スクリプトのコードを変更して、必要なパラメータ・ファイルを生成します。

インポート・ドライバ・スクリプトを実行モードで起動し、Data Pumpインポートを実行します:

   cd <Shared_location>/XTTS_Migration
   sh impdp.sh <expdp_dumpfile> <rman_last_restore_log> run N

常に Data Pumpログファイルを確認してください。Data Pumpが正常に表示されたとしても、常に Data Pumpログファイルで重要なエラーを確認してください。

  1. インポートの完了後に、ソース・データベースおよびターゲット・データベースで監査パラメータを再度有効にします。
   show parameter audit_sys_operations
   show parameter audit_trail
   alter system set audit_trail=<value before migration taken above> scope=spfile sid='*';
   alter system set audit_sys_operations=<value before migration taken above> scope=spfile sid='*';
   srvctl stop database -d ${ORACLE_UNQNAME}
   srvctl start database -d ${ORACLE_UNQNAME}
   show parameter audit_sys_operations
   show parameter audit_trail
  1. 転送されたデータを検証します。
   rman target sys/<password>@<target_db_name> trace=rman_trace.trc log=<backup_location>/tablespace_validate.log
   validate tablespace <comma-separated tablespace list> check logical;
  1. ターゲット・データベースの準備で行われた変更を元に戻すユーザー表領域を割り当てます。
   select 'alter user '||username||' default tablespace users;' from dba_users where default_tablespace='USERS_OCI';
  Execute the alter commands generated by above select query.
   select count(*) from dba_users where default_tablespace='USERS_OCI';
   ALTER DATABASE DEFAULT TABLESPACE USERS;
   drop tablespace USERS_OCI including contents and datafiles;
   select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME='USERS';

ソース・データベースおよびターゲット・データベースのデータを検証します。

関連リンク

確認

その他の学習リソース

docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャンネルで無料のラーニングコンテンツにアクセスしてください。また、Oracle Learning Explorerになるには、education.oracle.com/learning-explorerにアクセスしてください。

製品ドキュメントについては、Oracle Help Centerを参照してください。