附註:

使用 V4 跨平台可傳輸表格空間將 Oracle Database 移轉至 OCI,並將其從 12c 升級至 19c

簡介

本教學課程涵蓋將 V4 跨平台可傳輸表格空間 (XTTS) 與 Oracle 復原管理程式 (RMAN) 增量備份搭配使用,以在不同位元組順序格式的系統之間移轉資料,且最少的應用程式停止工作時間。

第一步是將完整備份從來源複製到目的地。接著,藉由使用一系列的增量備份,每個小於最後一個的增量備份,在需要任何停止工作時間之前,目的地系統的資料幾乎可以和來源系統一起帶入最新的資料。此程序只需要在最終增量備份期間停止工作,以及描述資料匯出或匯入。

本教學課程描述可用於 11.2.0.3 和更新版本的「跨平台增量備份」的 V4 程序。

環境詳細資訊

目標

必要條件

作業 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. 在來源資料庫上建立 transport_set_violations 視觀表。

    exec dbms_tts.transport_set_check('<list of tablespaces with comma saperated>');
    SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
    
  4. ( 選擇性 ) 啟用來源資料庫的區塊變更追蹤,以提升增量備份的效能。

  5. 確認來源資料庫上的所有表格空間都已上線。

  6. 移除重建索引參數空間索引,並修改無法使用的空間索引。

    • 此步驟會檢查以確保您在空間索引中沒有重建索引參數。若為多租用戶環境,請先執行下列命令,將 Oracle 資料庫 (PDB NAME) 的資料庫 SID 欄位設為可插拔資料庫名稱。

      export ORACLE_PDB_SID=[PDB NAME]
      
    • 若要查看是否有任何重建索引參數,請在來源資料庫伺服器節點上,以來源資料庫伺服器檔案系統和資料庫執行處理的擁有者身分,使用 SQL*Plus 以 sysdba 身分連線來源資料庫,然後執行下列查詢。

      select owner,index_name from dba_indexes where index_type='DOMAIN' and upper(parameters) like '%REBUILD%';
      
    • 若要移除重建索引參數,請使用 SQL*Plus 以索引擁有者的身分連線至來源資料庫,然後執行下列查詢。

      alter index [index name] rebuild parameters [parameters]
      
  7. 同步文字索引。使用 SQL*Plus 以 SYSDBA 身分連線來源資料庫,並執行下列查詢以尋找所有擱置同步的索引。

    select pnd_index_owner,pnd_index_name,count(*) from ctxsys.ctx_pending group by pnd_index_owner,pnd_index_name;
    

    若要同步化索引,請執行下列查詢。

    exec ctx_ddl.sync_index('[index owner].[index name]');
    

作業 2:準備目標資料庫

  1. 建立暫時的新使用者表格空間。如果目標資料庫是多雲端用戶環境,請連線到 PDB。

    alter session set container=[PDB NAME]
    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_OCI 指派給擁有預設表格空間 USERS 的所有資料庫使用者。

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

    查詢的輸出必須傳回 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 temp tablespaces on target database like below example.
    create bigfile temporary tablespace USER_TEMP tempfile size 672m autoextend on next 672m extent management local;
    
  3. 建立 Oracle E-Business Suite 應用程式的 nls/data/9idata 目錄。

    srvctl getenv database -d $ORACLE_UNQNAME
    perl $ORACLE_HOME/nls/data/old/cr9idata.pl  --> on all the nodes of the cluster
    srvctl setenv database -d $ORACLE_UNQNAME -t ORA_NLS10=$ORACLE_HOME/nls/data/9idata
    srvctl getenv database -d $ORACLE_UNQNAME
    
  4. 建立 Oracle E-Business Suite 應用程式的 $ORACLE_HOME/appsutil/jre。將 appsutil 資料夾從路徑 $ORACLE_HOME 下的來源資料庫複製到路徑 $ORACLE_HOME 下的目標資料庫伺服器。複製資料夾後,請在目標資料庫伺服器的所有節點上執行下列命令。

    cd $ORACLE_HOME/appsutil
    ln -s $ORACLE_HOME/jdk/jre
    cd $ORACLE_HOME/jdk/jre/lib/ext
    cp $ORACLE_HOME/jlib/orai18n.jar .
    
  5. 設定 Oracle E-Business Suite 應用程式的系統綱要。

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @audb19c.sql
    
  6. 設定 Oracle E-Business Suite 應用程式的系統綱要。

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    @ausy19c.sql
    
  7. 設定 Oracle E-Business Suite 應用程式的 CTXSYS 參數。

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    exec ctxsys.ctx_adm.set_parameter('file_access_role', 'public');
    
  8. 自動收集 Oracle E-Business Suite 應用程式的統計資料。

    export ORACLE_PDB_SID=[PDB_NAME]
    sqlplus / as sysdba
    show con_name
    alter system enable restricted session;
    @adstats.sql
    alter system disable restricted session;
    

工作 3:增量 V4 XTTS 步驟

作業 3.1:初始階段

  1. 從此處下載最新的 v4 perl 命令檔並解壓縮:V4 使用跨平台增量備份 (文件 ID 2471245.1) 減少可傳輸表格空間停止工作時間。建立目錄以解壓縮命令檔和暫存目錄。

    例如:

    mkdir -p <Backup_location>/XTTS_Migration
    mkdir -p <Backup_location>/XTTS_Migration/XTTS_TEMP
    
  2. 使用您的網站特定組態編輯來源系統上的 xtt.properties 檔案。如需有關 xtt.properties 檔案中參數的詳細資訊,請參閱組態檔 xtt.properties 小節中的參數描述:V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1) 。對於此程序,僅需要下列參數。其他則為選擇性和 (或) 可供使用。

    tablespaces=<list of tablespaces that are migrated with comma saperated>
    platformid= <obtained from the query select platform_name,platform_id, endian_format from v$transportable_platform>
    src_scratch_location= <Backup location on source database server>
    dest_scratch_location= <Backup location on target database server>
    dest_datafile_location= <path for the datafile location of PDB >
    destconnstr=sys/<password>>@<Target PDB Connect String>
    usermantransport=1 - It is recommended this be set if the source database is running 12c or higher. This causes new 12c (and higher)
    parallel=1
    

作業 3.2:準備階段

  1. 在來源系統上執行備份。在來源系統上,以 Oracle 使用者身分登入指向來源資料庫的環境 (ORACLE_HOMEORACLE_SID 環境變數),執行備份的方式如下。

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
    
  2. 將下列檔案傳輸至目標資料庫伺服器。

    • 從來源 src_scratch_location 建立的備份至目的地 dest_scratch_location

    • 從來源 $TMPDIR 到目的地 $TMPDIRres.txt 檔案。

    在下列範例中,使用 scp 將上一個步驟建立的 level=0 備份從來源系統傳輸到目的地系統。

    [oracle@source]$ scp /src_scratch_location/* oracle@dest:/dest_scratch
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. 回復目的地系統上的資料檔。

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_L0
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3 &
    

作業 3.3:向前捲動階段

在此階段期間,會從來源資料庫建立增量備份、傳輸至目的地系統、轉換成目的地系統位元組順序格式,然後套用至轉換的目的地資料檔複本以向前捲動。此階段可執行多次。每個後續增量備份所花費的時間應該要比先前的增量備份少,而且會讓目的地資料檔複本與來源資料庫比較最新。正在傳輸的資料 (來源) 可在此階段完整存取。

注意:您可以對來源執行多個備份,而不將它們套用至目的地。必須先複製備份檔案和 res.txt,才能在目的地執行 「– restore」指令。

  1. 建立要在來源系統上傳輸之表格空間的增量備份。

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_1
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
    

    此步驟會為 xtt.properties 檔案中列出的所有表格空間建立增量備份。

  2. 將增量備份和 res.txt 傳輸至目的地系統。將增量備份 (src_scratch_locationdest_scratch_location 之間) 和 res.txt ($TMPDIRs 之間) 從來源傳輸至目的地。您可以在來源系統的 incrbackups.txt 檔案中找到目前備份的增量備份檔案清單。

    例如:

    [oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  3. 將增量備份套用至目的地系統上的資料檔複本。在目的地系統上,以 Oracle 使用者身分登入,其環境 (ORACLE_HOMEORACLE_SID 環境變數) 指向目的地資料庫,執行向前捲動資料檔步驟,如下所示。

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_3
    $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3
    

    向前復原步驟會連線至目的地資料庫,然後針對要傳輸的每個表格空間,在表格空間的資料檔套用增量備份。

    注意:雖然可以對來源執行多個備份,但不在目的地套用,但必須在上次備份之後複製 res.txt 檔案,而且在目的地執行 --restore 之前。

    重複向前捲動階段,直到資料庫切換時段為止。

作業 3.4:最終增量備份階段

  1. 將來源資料庫中的來源表格空間更改為 READ ONLY。如果所有表格空間都傳輸至目標資料庫,請執行下列查詢。

    set lines 300
    select 'alter tablespace "'||tablespace_name||'" read only;' from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  2. 建立要在來源系統上傳輸之表格空間的最終增量備份。

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_4
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
    
  3. 將增量備份和 res.txt 傳輸至目的地系統。

    例如:

    [oracle@source]$ scp 'cat incrbackups.txt' oracle@dest:/dest_scratch_location
    [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
    
  4. 將上次增量備份套用至目的地資料檔。

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    cp nohup.out nohup.out_5
    nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3 &
    

作業 3.5:傳輸階段 - 將描述資料和 Plug-in 表格空間匯出至目的地資料庫

  1. 建立儲存匯出備份檔案的目錄。

    例如:

    mkdir -p <Backup_location>/XTTS_DPUMP
    

    執行下列查詢,在來源資料庫中建立目錄。

    create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP';
    grant read,write on directory XTTS_DUMP to system;
    
  2. 準備匯出剖析檔。

    vi xtts_expdp.par
    
    directory=XTTS*DUMP
    metrics=y
    dumpfile=xttsfulltts*%U.dmp
    filesize=1048576000
    full=y
    exclude=STATISTICS
    logfile=expfulltts.log
    parallel=4
    transportable=always
    EXCLUDE=NORMAL_OPTIONS
    
  3. 在來源資料庫執行資料汲取匯出。

    nohup expdp system/<password>@<source_db_name> parfile= xtts_expdp.par &
    
  4. 在產生要匯入之範例 parfile 的目標資料庫伺服器上執行下列命令。

    export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    $ORACLE_HOME/perl/bin/perl xttdriver.pl -e
    

    更新上一個步驟中產生的下列剖析檔行。

    impdp directory=<DATA_PUMP_DIR> logfile=<tts_imp.log> \
    network_link=<ttslink> transport_full_check=no \ replace these parameters
    transport_tablespaces=<tablespace list> \ delete this line from parfile
    

    最終匯入 parfile 應該如下:

    directory=XTTS*DUMP logfile=impdpfulltts.log \
    metrics=y dumpfile=xttsfulltts*%U.dmp parallel=6 full=y logtime=all exclude=STATISTICS \
    transport_datafiles=<list of datafile path generated from above parfile>
    
  5. 停用下列稽核相關參數,直到匯入完成為止 (如上所述)。請在匯入完成後重新啟用它們。

    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
    
  6. 在目標資料庫上執行資料汲取匯入。

    1. 建立複製匯出備份檔案的目錄。

      例如:

      mkdir -p <Backup_location>/XTTS_DPUMP
      
    2. 執行下列命令,在來源資料庫中建立目錄。

      create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP';
      grant read,write on directory XTTS_DUMP to system;
      
      nohup impdp system/<password>@<>target_db_name> parfile=<parfile_name> &
      
  7. 在匯入完成後啟用下列稽核相關參數。

    show parameter audit_sys_operations
    show parameter audit_trail
    alter system set audit_trail=DB scope=spfile sid='_';
    alter system set audit_sys_operations=TRUE scope=spfile sid='_';
    srvctl stop database -d ${ORACLE_UNQNAME}
    srvctl start database -d ${ORACLE_UNQNAME}
    show parameter audit_sys_operations
    show parameter audit_trail
    
  8. 驗證傳輸的資料。

    rman target sys/<password>@<>target_db_name> trace=rman_trace.trc log=<backup_location>/tablespace_validate.log
    
    validate tablespace <list of tablespaces transported with comma saperated> check logical;
    
  9. 指定使用者表格空間以回復在目標資料庫準備中所做的變更。

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

    驗證來源與目標資料庫上的資料。

認可

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center