본문 바로가기
AWS/DMS (Database Migration Service)

DMS(Database Migration Service) 구성 가이드

by DBTechBiz 2022. 8. 24.

▽ 이기종간의 마이그레이션 작업을 진행한다고 하면 무조건 DMS 서비스를 추천한다. 저자는 RDS for Oracle to Aurora MySQL DB 로 마이그레이션을 진행하였는데, 툴을 사용하지 않고 수동으로 작업을 할 경우 다양한 이슈가 발생한 경험이 있어 이기종간DB는 꼭 DMS 서비스를 강력 추천을 드린다. 

DMS 복제 인스턴스 환경

Engine Version : 3.4.6
Instance Class : dms.t3.small
다중 AZ : 아니오
할당된 스토리지(GiB) : 50

DMS 구성도

▽ DMS 복제 인스턴스를 Stage 환경에 구축하여, Stage 기준으로 환경을 세팅
    VPC 망마다 IP 대역이 다르므로 inbound/outbound, peering 연결을 추가하였고 세팅값은 아래와 그림과 같다.

 

DMS 설정 가이드

1. 복제 인스턴스 생성

  • 복제 인스턴스 이름 입력
  • 인스턴스 클래스 선택
  • 엔진 버전 선택
  • 스토리지 할당량 입력
  • VPC 선택
  • 다중 AZ 사용여부 선택
  • 퍼블릭 액세스 가능여부 선택

▽ 요금은 아래의 링크를 참고하며, 인스턴스 클래스 정보와 할당된 스토리지, 단일/다중 AZ 로 요금이 계산된다. 동일한 리전(ex. ap-northeast-2) 영역이면 네트워크 전송에 대한 요금은 무료이며 복제 인스턴스는 중지 기능이 없으므로 생성하는 순간부터 요금이 누적된다.
http://aws.amazon.com/ko/dms/pricing

저자가 사용 중인 요금
 t3.small(vCPU : 2, Memory : 2 Gib), 50 GiB, 단일 AZ 구성 : 매월 약 47.43 USD

 

2. VPC 보안그룹 inbound, outbound 정책 설정

위의 구성도를 참고하여 각자의 환경에 맞게 정책을 설정하기 바란다.

 

3. 피어링 연결

 위의 구성도를 참고하여 각자의 환경에 맞게 정책을 설정하기 바란다.

 

4. 엔드포인트 생성

  • 소스 엔드포인트(ORADB)

  • 타겟 엔드포인트(MysqlDB)

 

5. 데이터베이스 마이그레이션 태스크 생성

마이그레이션 대상 테이블을 등록한다. DMS 는 스키마 이관, 테이블 이관, 테이블 컬럼 추가/삭제 등의 기능을 제공한다. 또한 Remap Table 기능도 제공하여 다른 테이블명으로 이관이 가능하다. Remap Schema 는 불가능하므로 Schema 변경을 하려면 AWS 에서 제공하는 Schema Conversion Tool 을 이용해야 한다.

 

참고사항

1. DMS 사용을 위한 소스(Oracle) DB 권한

-- DMS 사용을 위한 소스 Oracle DB 권한
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_VIEWS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_TAB_PARTITIONS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_INDEXES', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_OBJECTS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_TABLES', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_USERS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_CATALOG', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_CONSTRAINTS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_CONS_COLUMNS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_TAB_COLS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_IND_COLUMNS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_LOG_GROUPS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$LOG', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$ARCHIVED_LOG', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$LOGFILE', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$DATABASE', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$THREAD', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$PARAMETER', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$NLS_PARAMETERS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$TIMEZONE_NAMES', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$TRANSACTION', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$CONTAINER', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('DBA_REGISTRY', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('OBJ$', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('ALL_ENCRYPTED_COLUMNS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$LOGMNR_LOGS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('V_$LOGMNR_CONTENTS', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('DBMS_LOGMNR', 'USER_NAME', 'SELECT');
EXEC RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT('REGISTRY$SQLPATCH', 'USER_NAME', 'SELECT');

GRANT CREATE SESSION TO USER_NAME;
GRANT SELECT ANY TRANSACTION TO USER_NAME;
GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
GRANT EXECUTE ON RDSADMIN.RDSADMIN_UTIL TO USER_NAME;
GRANT EXECUTE ON RDSADMIN.RDS_FILE_UTIL TO USER_NAME;

-- 이관 대상 테이블 SELECT 권한
GRANT SELECT ON SCHEMA_NAME.TABLE_NAME TO USER_NAME;

 

▽ 다른 환경(ex. 개발 -> 스테이지, 개발 -> 운영) 과의 DMS 를 이용한 Migration 시, 속도 이슈가 발생한다면 위에서 설정한 VPC Peering 을 제대로 이용하여 통신하지 않을 가능성이 크다. 게이트웨이를 지나고 등등 여러 구간의 홉을 경유하여 속도가 지연 되었다고 생각해 볼 수 있다. 우선 정확한 원인 파악을 위해 어느 경로로 경유하여 통신을 하는지 확인한다.  여러 구간을 거치는게 맞다면 그 이슈 구간의 VPC 라우팅 테이블에 피어링ID(pcx 로 시작)를 추가하여 해결할 수 있다. 다만 이러한 분석이 어렵다면 AWS Case Open 을 진행하여 도움을 받는 것을 권고한다.

 

반응형

'AWS > DMS (Database Migration Service)' 카테고리의 다른 글

Oracle VS Mysql 데이터 타입 비교  (0) 2022.08.29

댓글