데이터베이스 링크를 통해 직접 Oracle Data Pump Import를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션 - AWS 권장 가이드

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

데이터베이스 링크를 통해 직접 Oracle Data Pump Import를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션

작성자: Rizwan Wangde(AWS)

환경: 프로덕션

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

대상: Amazon RDS for Oracle

R 타입: 리플랫포밍

워크로드: Oracle

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

AWS 서비스: AWS DMS, AWS Direct Connect, Amazon RDS

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

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

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

사전 조건 

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

  • Amazon RDS 인스턴스에 네트워크 인프라를 제공하기 위해 두 개 이상의 가용 영역에 프라이빗 서브넷으로 구성된 가상 프라이빗 클라우드(VPC)입니다.

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

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

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

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

제한 사항

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

제품 버전

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

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

소스 기술 스택  

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

대상 기술 스택  

  • Amazon RDS for Oracle

대상 아키텍처 

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

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

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

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

AWS 서비스

  • AWS 데이터베이스 마이그레이션 서비스(AWS DMS)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정의 조합 간에 마이그레이션할 수 있습니다. 이 패턴은 CDC 를 사용하고 데이터 복제만 설정을 변경합니다.

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

  • Amazon Relational Database Service(Amazon RDS) for Oracle은 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영 및 확장하는 데 도움이 됩니다.

기타 도구

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 Data Pump Full Load 완료 후 AWS DMS CDC 마이그레이션을 위해 온프레미스 소스 Oracle 데이터베이스를 준비합니다.

  1. Oracle Data Pump 마이그레이션 FLASHBACK 중에 를 관리하는 데 필요한 추가 권한을 구성합니다.

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

  3. 를 CDC 사용하기 위해 Oracle 자체 관리형 소스 데이터베이스를 준비하려면 AWS DMS 설명서를 AWS DMS참조하세요.

DBA

SQL Developer를 설치하고 구성합니다.

소스 및 대상 데이터베이스에서 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 지원 문서의 스크립트를 사용합니다. dbms_metadata.get_ddl(Doc ID 2739952.1)을 사용하여 권한 및 역할을 포함하여 사용자를 DDL 위해 추출하는 방법(Oracle 계정 필요)

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

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

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

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

  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를 실행합니다.

코드에서 소스 데이터베이스에서 캡처SCN한 <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>로 를 바꿉니다.

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 데 사용합니다.

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

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

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

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

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

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

AWS DMS CDC전용 태스크를 중지합니다(이 켜져 CDC 있는 경우).

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

  2. AWS DMS CDC전용 태스크를 중지합니다.

DBA

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

CDC 작업이 생성되기 전에 비활성화TRIGGERS한 를 활성화합니다.

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; /

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

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

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

  • 다음 메타데이터 필터를 추가하여 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 인스턴스에 배치에 삽입하여 성능을 개선합니다.