데이터베이스 링크를 통한 직접 Oracle 데이터 펌프 가져오기를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

데이터베이스 링크를 통한 직접 Oracle 데이터 펌프 가져오기를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션

작성자: Rizwan Wangde(AWS)

환경: 프로덕션

‬소스:‭ 온프레미스 오라클 데이터베이스

대상: Amazon RDS for Oracle

R 유형: 리플랫포밍

워크로드: Oracle

기술: 마이그레이션; 데이터베이스

AWS 서비스: AWS DMS, AWS Direct Connect, 아마존 RDS

대규모 Oracle 워크로드를 마이그레이션하는 데 선호되는 방법인 네이티브 Oracle 유틸리티인 Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션하는 방법은 다양합니다. 이러한 패턴에는 일반적으로 애플리케이션 스키마 또는 테이블을 덤프 파일로 내보내고, 덤프 파일을 Amazon RDS for Oracle의 데이터베이스 디렉터리로 전송한 다음, 덤프 파일에서 애플리케이션 스키마와 데이터를 가져오는 작업이 포함됩니다.

이 접근 방식을 사용하면 데이터 크기와 Amazon RDS 인스턴스로 덤프 파일을 전송하는 데 걸리는 시간에 따라 마이그레이션 시간이 더 오래 걸릴 수 있습니다. 또한 덤프 파일은 Amazon RDS 인스턴스의 Amazon Elastic Block Store(Amazon EBS) 볼륨에 있으며, 이 볼륨은 데이터베이스와 덤프 파일을 저장할 수 있을 만큼 충분히 커야 합니다. 가져온 후 덤프 파일을 삭제하면 빈 스페이스를 검색할 수 없으므로 사용하지 않은 스페이스에 대한 비용을 계속 지불해야 합니다.

이 패턴은 데이터베이스 링크를 통해 Oracle Data Pump API(DBMS_DATAPUMP)를 사용하여 Amazon RDS 인스턴스에서 직접 가져오기를 수행함으로써 이러한 문제를 완화합니다. 이 패턴은 소스 데이터베이스와 대상 데이터베이스 간의 동시 내보내기 및 가져오기 파이프라인을 시작합니다. 이 패턴은 덤프 파일이 생성되거나 볼륨에 저장되지 않으므로 덤프 파일의 EBS 볼륨 크기를 조정할 필요가 없습니다. 이 방법을 사용하면 사용하지 않는 디스크 스페이스의 월별 비용을 절약할 수 있습니다.

사전 조건

  • 활성 Amazon Web Services(AWS) 계정.

  • Amazon RDS 인스턴스에 네트워크 인프라를 제공하기 위해 최소 두 개의 가용 영역에 걸쳐 프라이빗 서브넷으로 구성된 Virtual Private Cloud(VPC).

  • 온프레미스 데이터 센터의 Oracle 데이터베이스입니다.

  • 단일 가용 영역에 있는 기존 Amazon RDS Oracle 인스턴스입니다. 단일 가용 영역을 사용하면 마이그레이션 중에 쓰기 성능이 향상됩니다. 전환 24~48시간 전에 다중 AZ 배포를 활성화할 수 있습니다.

  • AWS Direct Connect (대규모 데이터베이스의 경우 권장).

  • Amazon RDS 인스턴스에서 온프레미스 Oracle 데이터베이스로의 인바운드 연결을 허용하도록 구성된 온프레미스 네트워크 연결 및 방화벽 규칙.

제한 사항

  • Amazon RDS for Oracle의 데이터베이스 크기 제한은 64TiB입니다(2022년 12월 기준).

제품 버전

  • 소스 데이터베이스: 오라클 데이터베이스 버전 10g 릴리스 1 이상.

  • 대상 데이터베이스: Amazon RDS에서 지원되는 최신 버전 및 에디션 목록은 AWS 설명서에서 Amazon RDS for Oracle을 참조하십시오.

소스 기술 스택  

  • 온프레미스 또는 클라우드에 있는 자체 관리형 Oracle 데이터베이스

대상 기술 스택  

  • Amazon RDS for Oracle

대상 아키텍처 

다음 다이어그램은 단일 AZ 환경에서 온프레미스 Oracle 데이터베이스에서 Amazon RDS for Oracle로 마이그레이션하기 위한 아키텍처를 보여줍니다. 화살표 방향은 아키텍처의 데이터 흐름을 나타냅니다. 다이어그램에는 연결을 시작하는 구성 요소가 표시되지 않습니다.

""
  1. Amazon RDS for Oracle은 온프레미스 소스 Oracle 데이터베이스에 연결하여 데이터베이스 링크를 통해 전체 로드 마이그레이션을 수행합니다.

  2. AWS DMS는 온프레미스 소스 Oracle 데이터베이스에 연결하여 변경 데이터 캡처(CDC)를 사용하여 지속적인 복제를 수행합니다.

  3. CDC 변경 사항은 Amazon RDS for Oracle 데이터베이스에도 적용됩니다.

서비스

  • AWS Database Migration Service(AWS DMS)는 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정의 조합 간에 마이그레이션하는 데 도움이 됩니다. 이 패턴은 CDC 및 데이터 변경 내용 복제 전용 설정을 사용합니다.

  • AWS Direct Connect는 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결합니다. 이 연결을 통해 네트워크 경로의 인터넷 서비스 공급자를 우회하여 퍼블릭 AWS 서비스에 직접 연결되는 가상 인터페이스를 생성할 수 있습니다.

  • Amazon Relational Database Service(RDS)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정하고, 운영하고, 규모를 조정하도록 도와줍니다.

기타 도구

  • Oracle Data Pump를 사용하면 한 데이터베이스에서 다른 데이터베이스로 데이터와 메타데이터를 빠른 속도로 이동할 수 있습니다.

  • Oracle Instant Client 또는 SQL Developer와 같은 클라이언트 도구는 데이터베이스에 연결하고 SQL 쿼리를 실행하는 데 사용됩니다.

AWS Direct Connect는 온프레미스 네트워크와 AWS 간에 전용 프라이빗 네트워크 연결을 사용하지만, 전송 중인 데이터에 대한 추가 보안 및 데이터 암호화를 위해 다음 옵션을 고려해 보십시오.

작업설명필요한 기술

대상 데이터베이스에서 소스 데이터베이스로의 네트워크 연결을 설정합니다.

대상 Amazon RDS 인스턴스에서 온프레미스 소스 Oracle 데이터베이스로 들어오는 연결을 허용하도록 온프레미스 네트워크 및 방화벽을 구성합니다.

네트워크 관리자, 보안 엔지니어

적절한 권한을 가진 데이터베이스 사용자를 생성합니다.

Oracle Data Pump를 사용하여 소스와 대상 간에 데이터를 마이그레이션할 수 있는 권한을 가진 데이터베이스 사용자를 온프레미스 소스 Oracle 데이터베이스에 생성합니다.

GRANT CONNECT to <migration_user>; GRANT DATAPUMP_EXP_FULL_DATABASE to <migration_user>; GRANT SELECT ANY TABLE to <migration_user>;
DBA

AWS DMS CDC 마이그레이션을 위한 온프레미스 소스 데이터베이스를 준비합니다.

(선택 사항) Oracle 데이터 펌프 전체 로드를 완료한 후 AWS DMS CDC 마이그레이션을 위해 온프레미스 소스 Oracle 데이터베이스를 준비하십시오.

  1. Oracle Data Pump 마이그레이션 중에 플래시백을 관리하는 데 필요한 추가 권한을 구성하십시오.

    GRANT FLASHBACK ANY TABLE to <migration_user>; GRANT FLASHBACK ARCHIVE ADMINISTER to <migration_user>;
  2. AWS DMS용 자체 관리형 Oracle 소스에 필요한 사용자 계정 권한을 구성하려면 AWS DMS 설명서를 참조하십시오.

  3. AWS DMS를 사용하여 CDC용 Oracle 자체 관리형 소스 데이터베이스를 준비하려면 AWS DMS 설명서를 참조하십시오.

DBA

SQL 개발자를 설치하고 구성합니다.

소스 및 대상 데이터베이스에서 SQL 쿼리를 연결하고 실행하도록 SQL Developer를 설치하고 구성합니다.

DBA, 마이그레이션 엔지니어

스크립트를 생성하여 테이블스페이스를 생성합니다.

다음 예제 SQL 쿼리를 사용하여 소스 데이터베이스에서 스크립트를 생성합니다.

SELECT 'CREATE TABLESPACE ' tablespace_name ' DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE UNLIMITED;' from dba_tablespaces where tablespace_name not in ('SYSTEM', 'SYSAUX','TEMP','UNDOTBS1') order by 1;

스크립트는 대상 데이터베이스에 적용됩니다.

DBA

스크립트를 생성하여 사용자, 프로필, 역할 및 권한을 생성합니다.

데이터베이스 사용자, 프로파일, 롤 및 권한을 생성하는 스크립트를 생성하려면 Oracle Support 문서 dbms_metadata.get_ddl을 사용하여 권한 및 롤을 포함한 사용자에 대한 DDL을 추출하는 방법 (문서 ID 2739952.1) (오라클 계정 필요) 의 스크립트를 사용하십시오.

스크립트는 대상 데이터베이스에 적용됩니다.

DBA
작업설명필요한 기술

소스 데이터베이스로 연결되는 데이터베이스 링크를 생성하고 연결을 확인합니다.

온프레미스 소스 데이터베이스로 연결되는 데이터베이스 링크를 만들려면 다음 예제 명령을 사용하면 됩니다.

CREATE DATABASE LINK link2src CONNECT TO <migration_user_account> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>) (PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))';

연결을 확인하려면 다음 SQL 명령을 실행합니다.

select * from dual@link2src;

응답이 다음과 같으면 연결에 성공한 X 것입니다.

DBA

스크립트를 실행하여 대상 인스턴스를 준비합니다.

이전에 생성한 스크립트를 실행하여 Amazon RDS for Oracle 인스턴스로 전환할 대상 Amazon RDS for Oracle을 준비합니다.

  1. 테이블스페이스

  2. 프로파일

  3. 역할

이렇게 하면 Oracle Data Pump 마이그레이션에서 스키마와 해당 객체를 생성할 수 있습니다.

DBA, 마이그레이션 엔지니어
작업설명필요한 기술

필수 스키마를 마이그레이션하십시오.

필요한 스키마를 소스 온프레미스 데이터베이스에서 대상 Amazon RDS 인스턴스로 마이그레이션하려면 추가 정보 섹션의 코드를 사용하십시오.

  • 단일 스키마를 마이그레이션하려면 추가 정보 섹션에서 코드 1을 실행하십시오.

  • 여러 스키마를 마이그레이션하려면 추가 정보 섹션에서 코드 2를 실행합니다.

마이그레이션 성능을 조정하려면 다음 명령을 실행하여 Parallel 프로세스 수를 조정할 수 있습니다.

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

스키마 통계를 수집하여 성능을 향상시킵니다.

스키마 통계 수집 명령은 데이터베이스 개체에 대해 수집된 Oracle 쿼리 최적화 프로그램 통계를 반환합니다. 최적화 프로그램은 이 정보를 사용하여 이러한 개체에 대한 쿼리에 가장 적합한 실행 계획을 선택할 수 있습니다.

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA
작업설명필요한 기술

소스 온프레미스 Oracle 데이터베이스에서 SCN을 캡처합니다.

소스 온프레미스 Oracle 데이터베이스에서 시스템 변경 번호(SCN)를 캡처합니다. 전체 로드 가져오기에는 SCN을 사용하고 CDC 복제의 시작점으로 사용합니다.

소스 데이터베이스에서 현재 SCN을 생성하려면 다음 SQL 문을 실행합니다.

SELECT current_scn FROM V$DATABASE;
DBA

스키마의 전체 로드 마이그레이션을 수행합니다.

필요한 스키마(FULL LOAD)를 소스 온프레미스 데이터베이스에서 대상 Amazon RDS 인스턴스로 마이그레이션하려면 다음을 수행하십시오.

  • 단일 스키마를 마이그레이션하려면 추가 정보 섹션에서 코드 3을 실행하십시오.

  • 여러 스키마를 마이그레이션하려면 추가 정보 섹션에서 코드 4를 실행합니다.

코드에서 소스 데이터베이스에서 캡처한 <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE> SCN으로 대체합니다.

DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>);

마이그레이션 성능을 조정하기 위해 Parallel 프로세스 수를 조정할 수 있습니다.

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

마이그레이션된 스키마에서 트리거를 비활성화합니다.

AWS DMS CDC 전용 작업을 시작하기 전에 마이그레이션된 스키마에서 TRIGGERS 해당 작업을 비활성화하십시오.

DBA

스키마 통계를 수집하여 성능을 향상시킵니다.

스키마 통계 수집 명령은 데이터베이스 개체에 대해 수집된 Oracle 쿼리 최적화 프로그램 통계를 반환합니다. 최적화 프로그램은 이 정보를 사용하여 이러한 개체에 대한 쿼리에 가장 적합한 실행 계획을 선택할 수 있습니다.

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA

AWS DMS를 사용하여 소스에서 대상으로 지속적인 복제를 수행합니다.

AWS DMS를 사용하여 소스 Oracle 데이터베이스에서 대상 Amazon RDS for Oracle 인스턴스로 지속적인 복제를 수행합니다.

자세한 내용은 AWS DMS를 사용하여 지속적인 복제를 위한 작업 생성 및 AWS DMS에서 네이티브 CDC 지원을 활용하는 방법에 대한 블로그 게시물을 참조하십시오.

DBA, 마이그레이션 엔지니어
작업설명필요한 기술

전환 48시간 전에 인스턴스에서 다중 AZ를 활성화하십시오.

프로덕션 인스턴스인 경우 고가용성 (HA) 및 재해 복구 (DR) 의 이점을 제공하려면 Amazon RDS 인스턴스에 다중 AZ 배포를 활성화하는 것이 좋습니다.

DBA, 마이그레이션 엔지니어

AWS DMS CDC 전용 작업을 중지합니다 (CDC가 켜져 있는 경우).

  1. AWS DMS 작업의 Amazon CloudWatch 지표에서 소스 지연 시간과 대상 지연 시간이 0초로 표시되는지 확인하십시오.

  2. AWS DMS CDC 전용 작업을 중지하십시오.

DBA

트리거를 활성화하십시오.

CDC 작업을 생성하기 전에 비활성화한 트리거를 활성화하십시오.

DBA

AWS

오라클 설명서

코드 1: 전체 로드 마이그레이션 전용, 단일 애플리케이션 스키마

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

코드 2: 전체 로드 마이그레이션 전용, 다중 애플리케이션 스키마

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name  => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

코드 3: CDC 전용 작업 이전의 전체 로드 마이그레이션, 단일 애플리케이션 스키마

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

코드 4: CDC 전용 작업 이전의 전체 로드 마이그레이션, 다중 애플리케이션 스키마

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN (operation => 'IMPORT', job_mode  => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE (handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

혼합 마이그레이션 접근 방식이 더 효과적일 수 있는 시나리오

드문 경우지만 소스 데이터베이스에 수백만 개의 행과 매우 큰 LOBSEGMEGMENT 열로 구성된 테이블이 포함되어 있는 경우 이 패턴으로 인해 마이그레이션 속도가 느려질 수 있습니다. Oracle은 네트워크 링크를 통해 LOBSegment를 한 번에 하나씩 마이그레이션합니다. 소스 테이블에서 단일 행(LOB 열 데이터 포함)을 추출하여 대상 테이블에 행을 삽입하고 모든 행이 마이그레이션될 때까지 프로세스를 반복합니다. 데이터베이스 링크를 통한 Oracle Data Pump는 LOBSegment에 대한 대량 로드나 직접 경로 로드 메커니즘을 지원하지 않습니다.

이 상황에서는 다음을 권장합니다.

  • 다음 메타데이터 필터를 추가하여 Oracle Data Pump 마이그레이션 중에 식별된 테이블을 건너뛰십시오.

    dbms_datapump.metadata_filter(handle =>h1, name=>'NAME_EXPR', value => 'NOT IN (''TABLE_1'',''TABLE_2'')');
  • AWS DMS 작업(전체 로드 마이그레이션, 필요한 경우 CDC 복제 포함)을 사용하여 식별된 테이블을 마이그레이션합니다. AWS DMS는 소스 Oracle 데이터베이스에서 여러 행을 추출하여 대상 Amazon RDS 인스턴스에 일괄적으로 삽입하므로 성능이 향상됩니다.