클라우드로 데이터베이스 업그레이드 및 이전

이 단일 단계 직접 이전 프로시저를 사용하면 작동 중지 시간이 거의 없이 그리고 동시에 데이터베이스를 최신 버전으로 업그레이드하여 온-프레미스 데이터베이스를 Oracle Cloud Infrastructure 로 이전할 수 있습니다. 이 이전 프로시저는 비용, 엔드투엔드 이전 시간 및 데이터베이스를 이전하는 데 필요한 테스트 노력을 줄입니다.

Oracle Database 18c로 업그레이드

소스 11.2.0.3 데이터베이스의 RMAN 백업을 18c Oracle 홈에 복원하고 Oracle Database 18c로 업그레이드합니다.

Oracle Database Exadata Cloud Service 를 사용하면 대상 컨테이너 데이터베이스가 이미 생성된 것으로 간주됩니다. 온-프레미스 데이터베이스에서 가져온 백업이 18c로 업그레이드되고 이 미리 생성된 컨테이너에서 PDB(플러그인할 수 있는 데이터베이스) 로 플러그인되었습니다. 온-프레미스 데이터베이스 백업은 11.2.0.3 이지만 Oracle Database Exadata Cloud Service 의 18c DB 홈에서 복원할 수 있습니다.

Set until SCN을 정의할 때 소스 RMAN 백업에서 캡처된 SCN을 사용합니다. 이 작업은 데이터베이스를 특정 시점까지 복원하려고 하기 위한 것이며, Oracle GoldenGate 에서 변경 델타 적용을 시작하는 시작점이기도 합니다.

  1. 소스 11.2.0.3 데이터베이스의 RMAN 백업을 18c Oracle 홈에 복원합니다.

    데이터베이스만 복원합니다. 복원 및 복구 후 데이터베이스를 열지 마십시오. 이는 데이터베이스를 18c로 업그레이드하기 때문입니다.

    RMAN 명령을 실행할 때 Set until SCN 값은 소스 RMAN 백업에서 캡처된 SCN입니다.

    RMAN> restore controlfile from '/rman_backups/cntrl_882_1_1005936032';
    
    RMAN> alter database mount;
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo1_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo1_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo2_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo2_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo3_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo3_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo30_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo30_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo31_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo31_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo32_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo32_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo40_1.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo40_2.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo41_1.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo41_2.dbf'' to ''+RECOC1''";
    
    RMAN> run
    {
    allocate channel ch1 type DISK ;
    allocate channel ch24 type DISK ;
    set until scn 2579195632075;
    set newname for database to '+DATAC1';
    restore database;
    switch datafile all;
    switch tempfile all;
    recover database;
    release channel ch1;
    release channel ch24;
    }
    
  2. Oracle Database 버전 18c로 업그레이드합니다.

    upgrade 옵션을 사용하여 데이터베이스를 열고 dbupgrade 명령을 실행합니다.

    SQL> alter database open resetlogs upgrade
    $ORACLE_HOME/bin/dbupgrade -n 20
    SQL> @?/rdbms/admin/utlu122s.sql
    SQL> @?/rdbms/admin/catuppst.sql 
    SQL> @?/rdbms/admin/utlrp.sql
    
  3. 대상 컨테이너에서 다음 명령문을 실행하여 시간대 버전을 확인하십시오.
    SQL> select * from v$timezone_file;
    
    FILENAME                VERSION     CON_ID
    -------------------- ---------- ----------
    timezlrg_31.dat              31          0
  4. 소스 데이터베이스의 시간대가 최신 시간대가 아닌 경우 업그레이드된 데이터베이스의 시간대를 클라우드 데이터베이스의 최신 시간대로 업데이트합니다.
    예를 들어, 소스 데이터베이스의 시간대가 14이면 클라우드의 최신 시간대 버전으로 업데이트해야 합니다.

데이터베이스를 컨테이너 데이터베이스로 변환

비컨테이너 데이터베이스를 PDB(플러그인할 수 있는 데이터베이스) 로 대상 컨테이너에 연결합니다.

시간대를 업데이트한 후 비컨테이너 데이터베이스를 대상 컨테이너의 플러그인할 수 있는 데이터베이스로 플러그인할 수 있습니다. 데이터베이스 크기가 커지므로 NOCOPY 절을 사용하여 PDB를 생성할 수 있습니다. NOCOPY 절을 사용하는 경우 비컨테이너 데이터베이스에 속한 동일한 데이터 파일 집합은 복사 작업을 수행하는 대신 플러그인할 수 있는 데이터베이스에 재첨부됩니다. 이렇게 하면 대용량 데이터베이스에 대한 시간과 공간이 절약됩니다.

비컨테이너 데이터베이스는 플러그인 작업에 대해 READ ONLY 모드여야 합니다.
  1. PDB(플러그인할 수 있는 데이터베이스) 기술자 파일을 비컨테이너 데이터베이스에 생성합니다.
    SQL> alter database open read only;
    SQL>BEGIN
    DBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/bildb.xml');
    END;
    /
    SQL> shutdown immediate
    
  2. 비컨테이너 데이터베이스 컨테이너에 PDB를 생성하고 세션을 변경합니다.
    SQL> SET SERVEROUTPUT ON;
    DECLARE
    compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/tmp/bildb.xml')
    WHEN TRUE THEN 'YES'
    ELSE 'NO'
    END;
    BEGIN
    DBMS_OUTPUT.PUT_LINE(compatible);
    END;
    /
    SQL> CREATE PLUGGABLE DATABASE bildb USING '/tmp/bildb.xml' SOURCE_FILE_NAME_CONVERT=('+DATA/bildb/DATAFILE','+DATA/bildb/DATAFILE','+DATA/bildb/TEMPFILE','+DATA/bildb/TEMPFILE') NOCOPY TEMPFILE REUSE;
    Pluggable database created.
    SQL>
    
    SQL> alter session set container=bildb;
    Session altered.
    
    SQL> show con_name
    CON_NAME
    ------------------------------
    BILDB
  3. Medata를 업데이트합니다.
    SQL> @/u01/app/oracle/product/18.0.0.0/dbhome_1/rdbms/admin/noncdb_to_pdb.sql

소스와 동기화

변경 델타를 적용하고 데이터를 이전하려면 대상 데이터베이스에서 변경 동기화를 시작하십시오.

대상 컨테이너에서 데이터베이스를 복원하고 플러그인할 수 있는 데이터베이스로 플러그인한 후에는 Oracle GoldenGate 의 초기 로드가 완료됩니다. 소스 데이터베이스에서 생성된 RMAN 백업 동안 캡처한 것과 동일한 SCN에서 변경 동기화를 시작합니다.

  1. 변경 동기화를 위해 대상 데이터베이스에서 replicat 명령을 시작합니다.
    GGSCI (mlib-gghubtgt) 2> START REPLICAT rep18c, ATCSN 2579195632075
    복제를 시작하면 온-프레미스 데이터베이스의 변경사항이 Oracle Cloud InfrastructureOracle Database 18c에 적용됩니다.
  2. Cutover의 경우, 클라우드의 Oracle Database 18c에서 Oracle Database 11.2.0.3 온프레미스로 복제 경로 바꾸기를 생성하는 것이 좋습니다. Cutover 후에 클라우드 데이터베이스에서 온-프레미스 11.2.0.3 데이터베이스로 플로우에 대한 트랜잭션에 대해 역방향 복제 경로를 사용으로 설정해야 합니다.