Question

AWS DMS를 사용하여 데이터베이스를 AWS RDS로 이관하고 있습니다. 

모든 원본 데이터는 성공적으로 이관되었지만, 메타데이터 중 트리거와 인덱스가 이관되지 않습니다.

해결 방안 문의드립니다.


Answer

AWS DMS는 데이터 이관 시 테이블과 기본 키, 그리고 일부 경우에 고유 인덱스를 생성합니다. 하지만 보조 인덱스나 기본이 아닌 키 제약 조건, 데이터 기본값과 같이 데이터 이관에 직접적으로 필요하지 않은 객체는 생성하지 않습니다. 이런 부분들은 별도의 추가 마이그레이션 작업이 필요합니다.


1. DMS시 인덱스가 옮겨지지 않는 것을 확인

<기존 DB>

<DMS 후 AWS RDS>


기존에 products 테이블에는 'PRIMARY'와 'idx_product_name' 두 개의 인덱스가 있었지만, AWS DMS 작업을 통해 데이터를 이관한 후에는 'PRIMARY' 인덱스만 남아 있는 것으로 보아, 보조 인덱스는 AWS DMS 작업에서 이관되지 않는 것을 확인했습니다.

AWS DMS는 기본적으로 테이블과 기본 키를 생성하며, 일부 경우에 고유 인덱스도 생성합니다. 하지만, 소스의 데이터를 효율적으로 마이그레이션하는 데 필요하지 않은 다른 객체(예: 보조 인덱스, 기본이 아닌 키 제약 조건, 데이터 기본값 등)는 생성하지 않습니다.


따라서 DMS 작업 후에 보조 인덱스가 필요하다면, 사용자가 수동으로 해당 인덱스를 생성하거나 다른 방법을 사용해야합니다. AWS DMS에서 제공하는 이런 기능은 데이터 마이그레이션 작업의 유연성을 높이고 사용자가 자신의 요구에 맞게 데이터를 이관할 수 있도록 돕습니다.


2. 보조 인덱스를 이관하는 방법

    1) 원본 데이터베이스와 동일한 데이터베이스 엔진으로 이관하는 경우:

데이터베이스에서 보조 객체를 마이그레이션하려면 해당 데이터베이스의 기본 도구를 사용할 수 있습니다. 예를 들어, MySQL의 경우 mysqldump와 같은 도구를 사용하여 이 작업을 수행할 수 있습니다. 이를 사용하여 인덱스를 포함한 데이터베이스의 스키마를 백업하고 복원할 수 있습니다.

a) 기존의 DB 구성

b) mysqldump 명령어를 통해 dump_file 생성

mysqldump -u [username] -p[password] [database_name] > [dump_file.sql]

c) mysql client를 사용해 dump_file을 RDS에 import
                    mysql -h {RDS endpoint} -P {port} -u {username} -p {password} {DB name} < exampleDB.sql

d) 기존의 DB 구성을 그대로 불러오는 것을 확인

    2) 원본 데이터베이스와 다른 데이터베이스 엔진으로 마이그레이션하는 경우:

이 경우, AWS Schema Conversion Tool (AWS SCT)를 사용하여 마이그레이션을 진행합니다. AWS SCT는 원본 데이터베이스의 스키마를 대상 데이터베이스 엔진의 형식에 맞게 변환하는 역할을 합니다. 이때의 스키마 변환이란, 테이블, 인덱스, 데이터 형식 등의 데이터베이스 구조를 다른 데이터베이스 엔진에 맞게 재구성하는 과정을 말합니다.

AWS SCT는 이러한 스키마 변환 작업을 자동화하여 원본 데이터베이스와 다른 데이터베이스 엔진으로의 마이그레이션을 원활하게 돕습니다. 변환 과정에서 발생할 수 있는 데이터 형식의 불일치나, 인덱스 설정의 차이 등의 문제를 자동으로 해결해줍니다.


이후 AWS SCT를 통해 변환된 스키마는 대상 데이터베이스에 적용되며, 이를 통해 원본 데이터베이스의 보조 객체를 대상 데이터베이스 엔진으로 이관할 수 있습니다. 


참조 링크:

#1 외래 키와 보조 인덱스가 누락됨 -

https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.General.MissingSecondaryObjs