주:

V4 교차 플랫폼 전송 가능한 테이블스페이스를 사용하여 Oracle Database를 OCI로 이전하고 12c에서 19c로 업그레이드

소개

이 사용지침서에서는 V4 XTTS(교차 플랫폼 전송 가능 테이블스페이스)를 Oracle Recovery Manager(RMAN) 증분 백업과 함께 사용하여 애플리케이션 작동 중지 시간이 최소화된 엔디언 형식이 다른 시스템 간에 데이터를 이전하는 데 필요한 단계를 다룹니다.

첫번째 단계는 소스에서 대상으로 전체 백업을 복사하는 것입니다. 그런 다음 일련의 증분 백업(각 백업이 마지막 백업보다 작음)을 사용하여 작동 중지 시간이 필요하기 전에 대상 시스템의 데이터를 소스 시스템과 거의 최신 상태로 만들 수 있습니다. 이 절차를 수행하려면 최종 증분 백업 및 메타 데이터 엑스포트/임포트 중에만 작동 중지 시간이 필요합니다.

이 사용지침서에서는 11.2.0.3 이상에서 사용할 수 있는 교차 플랫폼 증분 백업에 대한 V4 절차에 대해 설명합니다.

환경 세부 정보

목표

필요 조건

작업 1: 소스 데이터베이스 준비

  1. 다음 query를 실행하여 소스 데이터베이스에서 엔디언 형식을 확인합니다.

    col PLATFORM_NAME for a50
    select platform_name,platform_id, endian_format from v$transportable_platform;
    
  2. 전송될 소스 데이터베이스의 테이블스페이스를 식별합니다. 모든 테이블스페이스를 이전하는 경우 다음 query를 실행합니다.

    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. 재구축 인덱스 매개변수 공간 인덱스를 제거하고 사용할 수 없는 공간 인덱스를 수정합니다.

    • 이 단계는 공간 인덱스에 재구축 인덱스 매개변수가 없는지 확인합니다. 다중 테넌트 환경의 경우 다음 명령을 먼저 실행하여 데이터베이스 SID 필드를 Oracle 데이터베이스(PDB NAME)에 대한 플러거블 데이터베이스 이름으로 설정하십시오.

      export ORACLE_PDB_SID=[PDB NAME]
      
    • 재구축 인덱스 파라미터가 있는지 확인하려면 원본 데이터베이스 서버 노드에서 원본 데이터베이스 서버 파일 시스템 및 데이터베이스 Instance의 소유자로 SQL*Plus를 사용하여 원본 데이터베이스에 sysdba로 연결하고 다음 query를 실행하십시오.

      select owner,index_name from dba_indexes where index_type='DOMAIN' and upper(parameters) like '%REBUILD%';
      
    • 재구축 인덱스 파라미터를 제거하려면 SQL*Plus를 사용하여 소스 데이터베이스에 인덱스 소유자로 연결한 다음 다음 query를 실행합니다.

      alter index [index name] rebuild parameters [parameters]
      
  7. 텍스트 인덱스 동기화. SQL*Plus를 사용하여 소스 데이터베이스에 SYSDBA로 연결하고 다음 query를 실행하여 동기화 보류 중인 모든 인덱스를 찾습니다.

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

    인덱스를 동기화하려면 다음 query를 실행합니다.

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

작업 2: Target Database 준비

  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(데이터 정의어) 출력을 사용하여 아래와 같이 디스크 그룹 이름을 바꾸고 새 users 테이블스페이스를 생성합니다.

    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;
    

    다음 query를 사용하여 기본 테이블스페이스 USERS를 가진 모든 데이터베이스 유저에게 새 USERS 테이블스페이스 USERS_OCI을 할당합니다.

    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. Target Database에 임시 테이블스페이스를 생성합니다. 소스에서 다음 query를 실행하고 테이블스페이스 세부 정보를 수집합니다.

    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를 생성합니다. $ORACLE_HOME 경로 아래의 소스 데이터베이스에서 $ORACLE_HOME 경로 아래의 대상 데이터베이스 서버로 appsutil 폴더를 복사합니다. 폴더가 복사되면 대상 데이터베이스 서버의 모든 노드에서 다음 명령을 실행합니다.

    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 애플리케이션에 대한 sys 스키마를 설정합니다.

    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 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc 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 플랫폼 간 증분 백업을 사용하여 전송 가능한 테이블스페이스 작동 중지 시간 감소(문서 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_HOMEORACLE_SID 환경 변수)을 사용하여 Oracle 사용자로 로그인하고 다음과 같이 백업을 실행합니다.

    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. 다음 파일을 Target Database 서버로 전송합니다.

    • 소스 src_scratch_location에서 대상 dest_scratch_location로 생성된 백업입니다.

    • 소스 $TMPDIR에서 대상 $TMPDIR까지의 res.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: 롤포워드 단계

이 단계 중 소스 데이터베이스에서 증분 백업이 생성되고 대상 시스템으로 전송되어 대상 시스템 엔디언 형식으로 변환된 다음 변환된 대상 데이터 파일 복사본에 적용되어 롤포워드됩니다. 이 단계는 여러 번 실행될 수 있습니다. 이어지는 각 Incremental 백업은 이전 Incremental 백업보다 시간이 적게 걸리며, 대상 데이터 파일 복사본이 원본 데이터베이스에 보다 최신 상태가 되도록 합니다. 전송되는 데이터(소스)는 이 단계에서 완전히 액세스할 수 있습니다.

주: 대상에 백업을 적용하지 않고 소스에 대해 여러 백업을 실행할 수 있습니다. 백업 파일과 res.txt는 대상에서 '–restore' 명령을 실행하기 전에 복사되어야 합니다.

  1. 소스 시스템에서 전송되는 테이블스페이스의 Incremental 백업을 생성합니다.

    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_HOMEORACLE_SID 환경 변수)을 사용하여 Oracle 사용자로 로그인한 후 다음과 같이 데이터 파일 롤포워드 단계를 실행합니다.

    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
    

    롤포워드 단계는 대상 데이터베이스에 연결하고 이동할 각 테이블스페이스에 대해 테이블스페이스의 데이터 파일에 증분 백업을 적용합니다.

    주: 대상에 적용되지 않고 소스에 대해 여러 백업을 실행할 수 있지만 마지막 백업 이후와 대상에서 --restore가 실행되기 전에 res.txt 파일을 복사해야 합니다.

    데이터베이스 컷오버 창이 될 때까지 롤포워드 단계를 반복합니다.

작업 3.4: 최종 증분 백업 단계

  1. 소스 데이터베이스에서 소스 테이블스페이스를 READ ONLY로 변경합니다. 모든 테이블스페이스가 Target Database로 전송되는 경우 다음 query를 실행합니다.

    set lines 300
    select 'alter tablespace "'||tablespace_name||'" read only;' from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
    
  2. 소스 시스템에서 전송되는 테이블스페이스의 최종 Incremental 백업을 생성합니다.

    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: 전송 단계 - 메타 데이터 및 플러그인 테이블스페이스를 대상 데이터베이스로 엑스포트

  1. 엑스포트 백업 파일을 저장할 디렉토리를 생성합니다.

    예를 들어, 다음과 같습니다.

    mkdir -p <Backup_location>/XTTS_DPUMP
    

    다음 query를 실행하여 원본 데이터베이스에 디렉토리를 생성합니다.

    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. Target Database 서버에서 임포트할 예제 parfile을 생성하는 다음 명령을 실행합니다.

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

    이전 단계에서 생성한 다음 parfile 행을 갱신합니다.

    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. users 테이블스페이스를 할당하여 Target Database 준비 과정에서 수행된 변경 사항을 되돌립니다.

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

    소스 및 대상 데이터베이스의 데이터를 검증합니다.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.