AWS DMS를 이용하여 자체관리형 ORALCE에서 RDS for ORACLE로 데이터 이관
테이블 2개를 이관하는 간단한 DMS 사용 예시입니다.
수행 환경
| SOURCE | TARGET | |
| DB 명 | SOURCEDB | TARGETDB |
| 환경 | EC2 설치형 Oracle | RDS for Oracle |
| 이관 대상 | EMP 스키마의 테이블 2개 EMP.TABLE1 EMP.TABLE2 |
EMP 스키마 없음 |

수행 단계
1. 복제 인스턴스 생성 및 방화벽 설정
2. 엔드포인트 설정
3. 타겟 데이터베이스에 대상 스키마 생성
4. dms task 생성
5. 수행 확인
1. 복제 인스턴스 생성 및 방화벽 설정
1-1. 복제 인스턴스 생성
AWS 콘솔 > Database Migration Service > 데이터 마이그레이션 > 복제 인스턴스 > 복제 인스턴스 생성
1-2. 방화벽 설정
소스 DB와 복제 인스턴스, 복제 인스턴스와 타겟 DB 간 통신이 가능하도록 DB Port, SSL Port 등의 방화벽 정책 확인
2. 엔드포인트 설정
2-1. 소스 데이터베이스 엔드포인트 설정
2-1-1. 소스 데이터베이스 DMS 엔드포인트용 DB계정 생성
CREATE USER user_dms_source IDENTIFIED BY "PASSWORD";
2-1-2. 소스 데이터베이스 DMS 엔드포인트용 DB계정 권한 부여
아래 문서에서 각 환경에 대한 필요 권한 및 설정 확인 가능
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html
Using an Oracle database as a source for AWS DMS - AWS Database Migration Service
For all parameter values such as db_user and any-replicated-table, Oracle assumes the value is all uppercase unless you specify the value with a case-sensitive identifier. For example, suppose that you create a db_user value without using quotation marks,
docs.aws.amazon.com
GRANT CREATE SESSION TO user_dms_source;
GRANT SELECT ANY TRANSACTION TO user_dms_source;
GRANT SELECT ON V_$ARCHIVED_LOG TO user_dms_source;
GRANT SELECT ON V_$LOG TO user_dms_source;
GRANT SELECT ON V_$LOGFILE TO user_dms_source;
GRANT SELECT ON V_$LOGMNR_LOGS TO user_dms_source;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO user_dms_source;
GRANT SELECT ON V_$DATABASE TO user_dms_source;
GRANT SELECT ON V_$THREAD TO user_dms_source;
GRANT SELECT ON V_$PARAMETER TO user_dms_source;
GRANT SELECT ON V_$NLS_PARAMETERS TO user_dms_source;
GRANT SELECT ON V_$TIMEZONE_NAMES TO user_dms_source;
GRANT SELECT ON V_$TRANSACTION TO user_dms_source;
GRANT SELECT ON V_$CONTAINERS TO user_dms_source;
GRANT SELECT ON ALL_INDEXES TO user_dms_source;
GRANT SELECT ON ALL_OBJECTS TO user_dms_source;
GRANT SELECT ON ALL_TABLES TO user_dms_source;
GRANT SELECT ON ALL_USERS TO user_dms_source;
GRANT SELECT ON ALL_CATALOG TO user_dms_source;
GRANT SELECT ON ALL_CONSTRAINTS TO user_dms_source;
GRANT SELECT ON ALL_CONS_COLUMNS TO user_dms_source;
GRANT SELECT ON ALL_TAB_COLS TO user_dms_source;
GRANT SELECT ON ALL_IND_COLUMNS TO user_dms_source;
GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TO user_dms_source;
GRANT SELECT ON ALL_LOG_GROUPS TO user_dms_source;
GRANT SELECT ON ALL_TAB_PARTITIONS TO user_dms_source;
GRANT SELECT ON SYS.DBA_REGISTRY TO user_dms_source;
GRANT SELECT ON SYS.OBJ$ TO user_dms_source;
GRANT SELECT ON DBA_TABLESPACES TO user_dms_source;
GRANT SELECT ON DBA_OBJECTS TO user_dms_source; -– Required if the Oracle version is earlier than 11.2.0.3.
GRANT SELECT ON SYS.ENC$ TO user_dms_source; -– Required if transparent data encryption (TDE) is enabled. For more information on using Oracle TDE with AWS DMS, see Oracle을 AWS DMS용 소스로 사용하기 위해 지원되는 암호화 방법.
GRANT SELECT ON GV_$TRANSACTION TO user_dms_source; -– Required if the source database is Oracle RAC in AWS DMS versions 3.4.6 and higher.
GRANT SELECT ON V_$DATAGUARD_STATS TO user_dms_source ; -- Required if the source database is Oracle Data Guard and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.
-- 특정 테이블 목록을 사용하는 경우 복제된 각 테이블에 대해 다음 권한을 추가로 부여하십시오.
GRANT SELECT on any-replicated-table to user_dms_source;
-- 검증 기능을 사용하여 LOB 열을 검증할 수 있는 다음과 같은 추가 권한을 부여하십시오.
GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user_dms_source;
-- 대신 바이너리 리더를 사용하는 경우 다음 권한을 추가로 LogMiner 부여하십시오.
GRANT SELECT ON SYS.DBA_DIRECTORIES TO user_dms_source;
--Oracle을 사용하여 리두 로그에 액세스하려면 Oracle LogMiner 엔드포인트 연결 설정에 지정된 Oracle 사용자에게 다음 권한을 부여하십시오.
GRANT EXECUTE on DBMS_LOGMNR to user_dms_source;
GRANT SELECT on V_$LOGMNR_LOGS to user_dms_source;
GRANT SELECT on V_$LOGMNR_CONTENTS to user_dms_source;
GRANT LOGMINING to user_dms_source; -– Required only if the Oracle version is 12c or later.
2-1-3 소스 데이터베이스 엔드포인트 생성
AWS 콘솔 > Database Migration Service > 데이터 마이그레이션 > 엔드포인트 > 엔드포인트 생성

소스 DB 구성 정보 입력

소스 DB 접속 정보 입력
이때 SYS 계정을 이용하여 접속 시 DMS 에러 발생함.
반드시 DMS 용 계정 따로 생성하여 접속하는 것 권장.

아래 사항 필요시 입력 후 생성 완료

엔드포인트 연결 테스트
엔드포인트 > 생성한 엔드포인트 클릭 > 엔드포인트 연결 테스트

2-2. 타겟 데이터베이스 엔드포인트 설정
2-2-1. 타겟 데이터베이스 DMS 엔드포인트용 DB계정 생성
CREATE USER user_dms_target IDENTIFIED BY "PASSWORD";
2-2-2. 타겟 데이터베이스 DMS 엔드포인트용 DB계정 생성 및 권한 부여
GRANT CREATE SESSION to user_dms_target;
GRANT SELECT ANY TRANSACTION to user_dms_target;
GRANT SELECT on DBA_TABLESPACES to user_dms_target;
GRANT SELECT ON any-replicated-table to user_dms_target;
GRANT EXECUTE on rdsadmin.rdsadmin_util to user_dms_target;
-- For Oracle 12c or later:
GRANT LOGMINING to user_dms_target; – Required only if the Oracle version is 12c or later.
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_VIEWS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_PARTITIONS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_INDEXES', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TABLES', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_USERS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CATALOG', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONSTRAINTS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_IND_COLUMNS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_LOG_GROUPS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_ENCRYPTED_COLUMNS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', 'user_dms_target', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','user_dms_target','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', 'user_dms_target', 'EXECUTE');
-- (as of Oracle versions 12.1 and later)
exec rdsadmin.rdsadmin_util.grant_sys_object('REGISTRY$SQLPATCH', 'user_dms_target', 'SELECT');
-- (for Amazon RDS Active Dataguard Standby (ADG))
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG', 'user_dms_target', 'SELECT');
-- (for transparent data encryption (TDE))
exec rdsadmin.rdsadmin_util.grant_sys_object('ENC$', 'user_dms_target', 'SELECT');
-- (for validation with LOB columns)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_CRYPTO', 'user_dms_target', 'EXECUTE');
-- (for binary reader)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_DIRECTORIES','user_dms_target','SELECT');
-- Required when the source database is Oracle Data guard, and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATAGUARD_STATS', 'user_dms_target', 'SELECT');
2-2-3. 타겟 데이터베이스 엔드포인트 생성
AWS 콘솔 > Database Migration Service > 데이터 마이그레이션 > 엔드포인트 > 엔드포인트 생성

RDS 인스턴스 리스트에서 대상 DB 선택하면 이하 구성 정보 자동으로 입력됨


이하 2-1-3 소스 데이터베이스 엔드포인트 생성 과 동일
3. 타겟 데이터베이스에 대상 스키마 생성
AWS DMS는 대상 Oracle 데이터베이스에 스키마를 생성하지 않습니다. 대상 Oracle 데이터베이스에 원하는 스키마를 생성해야 합니다. Oracle 대상에 대한 스키마 이름이 이미 존재해야 합니다.

출처 https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html
Using an Oracle database as a target for AWS Database Migration Service - AWS Database Migration Service
Using an Oracle database as a target for AWS Database Migration Service You can migrate data to Oracle database targets using AWS DMS, either from another Oracle database or from one of the other supported databases. You can use Secure Sockets Layer (SSL)
docs.aws.amazon.com
CREATE USER emp IDENTIFIED BY "PASSWORD";
GRANT CREATE SESSION, ALTER SESSION TO emp;
GRANT CONNECT TO emp;
GRANT UNLIMITED TABLESPACE TO emp;
4. dms task 생성
AWS 콘솔 > Database Migration Service > 데이터 마이그레이션 > 데이터베이스 마이그레이션 태스크 > 태스크 생성


선택규칙 추가
EMP.TABLE1, EMP.TABLE2 만 테이블만 포함하도록 설정


변환규칙 추가
기본적으로 dms 접속한 계정에 테이블이 생성된다.
3. 타겟 데이터베이스에 대상 스키마 생성 단계에서 생성한 EMP 스키마에 테이블이 생성되도록 변환 규칙을 추가한다.

태스크 생성

5. 수행 확인
데이터베이스 마이그레이션 태스크 > 해당 태스크

개요 세부 정보 - 진행률과 최근 실패 메세지 확인

테이블 통계 - 각 테이블 로드 정보 확인



'IT > AWS' 카테고리의 다른 글
| [Aurora MySQL]갑작스러운 CPU 상승, 롤백 세그먼트 이력에 대한 해결과 성능 튜닝 (1) | 2023.12.07 |
|---|---|
| [AWS] RDS for Oracle 에서 Datapump 사용 예시 (0) | 2023.11.24 |
| [AWS] Aurora Mysql Cluster Scale-in 절차 (0) | 2023.11.16 |
| [AWS] EC2 설치형 ORACLE DB - EC2 스펙 변경 시 DB 검토 사항 (0) | 2023.11.16 |
| [DMS]엔드포인트 생성 중 ORA-28009 에러 발생 (0) | 2023.07.28 |