AWS Database Migration Service
사용 설명서 (버전 API Version 2016-01-01)

AWS Database Migration Service에서 마이그레이션 작업 문제 해결

다음 섹션에는 AWS Database Migration Service(AWS DMS)에서 발생한 문제의 해결과 관련된 정보가 나와 있습니다.

느리게 실행되는 마이그레이션 작업

마이그레이션 작업이 느리게 실행되거나 연속 작업이 초기 작업보다 느리게 실행되도록 만들 수 있는 여러 문제가 있습니다. 마이그레이션 작업이 느리게 실행되는 가장 일반적인 이유는 AWS DMS 복제 인스턴스에 부적절한 리소스가 할당되었기 때문입니다. 복제 인스턴스의 CPU, 메모리, 스왑 파일 및 IOPS 사용량을 확인하여 실행 중인 작업을 지원하는 리소스가 인스턴스에 충분한지 확인합니다. 예를 들어, 엔드포인트로서 Amazon Redshift에서 여러 작업을 실행하면 IO가 집중적으로 사용됩니다. 복제 인스턴스용 IOPS를 눌리거나 여러 복제 인스턴스에서 작업을 분할하면 보다 효율적인 마이그레이션이 가능합니다.

복제 인스턴스 크기 결정에 대한 자세한 내용은 복제 인스턴스에 최적인 크기 선택 섹션을 참조하십시오.

다음 작업을 수행하여 초기 마이그레이션 로드 속도를 촉진할 수 있습니다.

  • 대상이 Amazon RDS DB 인스턴스인 경우, 다중 AZ가 대상 DB 인스턴스에서 활성화되지 않도록 해야 합니다.

  • 로드 중에 대상 데이터베이스에서 자동 백업 또는 로깅 기능을 끄고, 마이그레이션이 끝난 후 이 기능을 다시 켭니다.

  • 이 기능을 대상에서 사용할 수 있는 경우, 프로비저닝된 IOPS를 사용합니다.

  • 마이그레이션 데이터에 LOB가 포함된 경우, 작업이 LOB 마이그레이션에 최적화되어 있는지 확인합니다. LOB에 최적화에 대한 자세한 내용은 대상 메타데이터 작업 설정 섹션을 참조하십시오.

작업 상태 표시줄이 이동하지 않음

작업 상태 표시줄은 작업 진행률의 추정치를 나타냅니다. 이 추정치의 품질은 원본 데이터베이스의 테이블 통계 품질에 따라 달라지며, 테이블 통계 품질이 좋을수록 추정 정확도가 높아집니다. 추정 행 통계 없이 단 하나의 테이블을 사용하는 작업의 경우, 모든 유형의 완료율 추정치를 제공할 수 없습니다. 이 경우에 작업 상태와 로드되는 행 표시를 사용하여 작업이 실제로 실행되고 진행되고 있음을 확인할 수 있습니다.

외래 키와 보조 인덱스 누락

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

데이터베이스에서 보조 객체를 마이그레이션하려면, 원본 데이터베이스와 동일한 데이터베이스 엔진으로 이동할 경우 데이터베이스의 기본 도구를 사용합니다. 보조 객체를 마이그레이션하기 위해 원본 데이터베이스가 사용하는 것과 다른 데이터베이스 엔진으로 마이그레이션할 경우 Schema Conversion Tool을 사용합니다.

Amazon RDS 연결 문제

엔드포인트로 설정한 Amazon RDS DB 인스턴트에 연결할 수 없는 이유에는 여러 가지가 있습니다. 다음이 포함됩니다.

  • 사용자 이름과 암호 조합이 잘못되었습니다.

  • 인스턴스의 Amazon RDS 콘솔에 표시된 엔드포인트 값이 AWS DMS 엔드포인트를 생성하는 데 사용된 엔드포인트 식별자와 동일한지 확인합니다.

  • 인스턴스의 Amazon RDS 콘솔에 표시된 포트 값이 AWS DMS 엔드포인트에 할당된 포트와 동일한지 확인합니다.

  • Amazon RDS DB 인스턴스에 할당된 보안 그룹이 AWS DMS 복제 인스턴스의 연결을 허용하는지 확인합니다.

  • AWS DMS 복제 인스턴스와 Amazon RDS DB 인스턴스가 동일한 VPC에 없는 경우, DB 인스턴스에 공개적으로 액세스할 수 있는지 확인합니다.

오류 메시지: Incorrect thread connection string: incorrect thread value 0

이 오류는 흔히 엔드포인트와의 연결을 테스트할 때 발생할 수 있습니다. 이 오류는 호스트 IP 주소 이후의 공백이나 잘못된 문자가 연결 문자열에 복사된 것과 같이 연결 문자열에 오류가 있음을 나타냅니다.

네트워킹 문제

가장 일반적인 네트워킹 문제에는 AWS DMS 복제 인스턴스에서 사용하는 VPC 보안 그룹이 포함됩니다. 기본적으로 이 보안 그룹에는 모든 포트에서 0.0.0.0/0로의 발신을 허용하는 규칙이 있습니다. 이 보안 그룹을 수정하거나 자체 보안 그룹을 사용하는 경우, 각 데이터베이스 포트에서 최소한 발신이 원본과 대상 엔드포인트에 허용되어야 합니다.

문제와 관련된 다른 구성은 다음과 같습니다.

  • 동일한 VPC의 복제 인스턴스와 원본 및 대상 엔드포인트 — 엔드포인트에서 사용하는 보안 그룹은 복제 인스턴스의 데이터베이스 포트에서 수신을 허용해야 합니다. 복제 인스턴스에서 사용하는 보안 그룹이 엔드포인트에 대한 수신이 있는지 확인하고, 그렇지 않으면 복제 인스턴스 액세스의 프라이빗 IP 주소를 허용하고 엔드포인트가 사용하는 보안 그룹에 규칙을 생성할 수 있습니다.

  • 원본 엔드포인트가 복제 인스턴스에서 사용하는 VPX 외부에 있음(인터넷 게이트웨이 사용) — VPC 보안 그룹에는 VPC로 전달되지 않고 인터넷 게이트웨이로 트래픽을 전송하는 라우팅 규칙이 포함되어야 합니다. 이 구성에서 엔드포인트와의 연결이 복제 인스턴스의 퍼블릭 IP 주소에서 오는 것으로 나타납니다.

  • 원본 엔드포인트가 복제 인스턴스에서 사용하는 VPC 외부에 있음(NAT 게이트웨이 사용) — 단일 탄력적 네트워크 인터페이스에 연결된 단일 탄력적 IP 주소를 사용하여 NAT(네트워크 주소 변환) 게이트웨이를 구성할 수 있습니다. 이렇게 하면 NAT 식별자(nat-#####)를 수신합니다. VPC에 인터넷 게이트웨이가 아닌 해당 NAT 게이트웨이로의 기본 경로가 포함된 경우, 대신 복제 인스턴스가 인터넷 게이트웨이의 퍼블릭 IP 주소를 사용하여 데이터베이스 엔드포인트에 접촉하는 것으로 나타납니다. 이 경우에 VPC 외부에 있는 데이터베이스 엔드포인트로의 수신은 복제 인스턴스의 퍼블릭 IP 주소가 아닌 NAT 주소의 수신을 허용해야 합니다.

전체 로드 후 CDC 중단

느리거나 중단된 복제 변경은 여러 AWS DMS 설정이 서로 충돌할 때 전체 로드 마이그레이션 이후에 나타날 수 있습니다. 예를 들어, 대상 테이블 준비 모드 파라미터를 아무 작업 안 함 또는 자르기로 설정한 경우 AWS DMS에서 기본 및 고유 인덱스 생성을 포함하여 대상 테이블에서 어떠한 설정도 하지 않도록 지시해야 합니다. 대상 테이블에서 기본 또는 고유 키를 생성하지 않은 경우, AWS DMS이(가) 업데이트마다 전체 테이블 스캔을 수행해야 합니다. 이는 성능에 상당한 영향을 줄 수 있습니다.

작업 재시작 시 기본 키 위반 오류

이 오류는 데이터가 이전 마이그레이션 작업의 대상 데이터베이스에 있을 때 발생할 수 있습니다. 대상 테이블 준비 모드 파라미터를 아무 작업 안 함으로 설정하면, AWS DMS에서는 이전 작업에서 삽입된 데이터 정리 등을 포함하여 대상 테이블에서 어떠한 준비도 하지 않습니다. 작업을 다시 시작하고 이 오류를 방지하려면, 이전 작업 실행에서 대상 테이블에 삽입된 행을 제거해야 합니다.

스키마 초기 로그 실패

Operation:getSchemaListDetails:errType=, status=0, errMessage=, errDetails= 오류로 인해 스키마의 초기 로드가 실패하면, 원본 엔드포인트에 연결하기 위해 AWS DMS에서 사용하는 사용자 계정에는 필요한 권한이 없습니다.

알 수 없는 오류로 인해 작업 실패

이 유형의 오류 원인은 다양할 수 있지만, 흔히 이 문제에는 AWS DMS 복제 인스턴스에 할당된 리소스가 불충분하다는 원인이 포함됩니다. 복제 인스턴스의 CPU, 메모리, 스왑 파일 및 IOPS 사용량을 확인하여 마이그레이션을 수행하는 리소스가 인스턴스에 충분한지 확인합니다. 모니터링에 대한 자세한 내용은 데이터 마이그레이션 서비스 지표 섹션을 참조하십시오.

시작부터 작업 재시작 시 테이블 로드

테이블의 초기 로드가 끝나지 않았을 때 AWS DMS에서는 처음부터 테이블 로드를 다시 시작합니다. 작업을 다시 시작할 때 AWS DMS에서는 초기 로드가 완료된 테이블을 다시 로드하지 않지만, 초기 로드가 완료되지 않았으면 처음부터 테이블을 다시 로드합니다.

작업당 테이블 수

복제 작업당 테이블 수에 설정된 한도가 없지만, 경험상 작업에서 테이블 수는 60,000개 미만으로 제한하는 것으로 보통입니다. 단일 작업에서 60,000개 이상의 테이블을 사용할 때 리소스에 흔히 병목 현상이 발생할 수 있습니다.

Oracle별 문제 해결

다음 문제는 Oracle 데이터베이스에서 AWS DMS을(를) 사용할 때에만 적용됩니다.

보기에서 데이터 가져오기

보기에서 데이터를 끌어와서 지속적인 복제에 사용할 수 없습니다. 보기에서 데이터를 추출할 수 있도록 Oracle 원본 엔드포인트의 [Advanced] 섹션에 있는 [Extra connection attributes ]에 다음 코드를 추가해야 합니다. 보기에서 데이터를 추출 시, 보기가 대상 스키마에서 테이블로 표시됩니다.

exposeViews=true

12c에서 LOB 마이그레이션

AWS DMS에서는 Oracle 데이터베이스의 변경 사항을 캡처할 때 두 가지 메서드, 즉 Binary Reader와 Oracle LogMiner를 사용합니다. 기본적으로 AWS DMS에서는 변경 사항을 캡처하기 위해 Oracle LogMiner를 사용합니다. 그렇지만, Oracle 12c에서 Oracle LogMiner는 LOB 열을 지원하지 않습니다. Oracle 12c에서 LOB 열의 변경 사항을 캡처하려면, Binary Reader를 사용합니다.

Oracle LogMiner와 Binary Reader 간 전환

AWS DMS에서는 원본 Oracle 데이터베이스의 변경 사항을 캡처할 때 두 가지 메서드, 즉 Binary Reader와 Oracle LogMiner를 사용합니다. Oracle LogMiner가 기본값입니다. 변경 캡처를 위해 Binary Reader 사용으로 전환하려면, 다음 작업을 수행합니다.

변경 캡처를 위해 Binary Reader를 사용하려면

  1. AWS Management Console에 로그인하고 DMS를 선택합니다.

  2. [Endpoints]를 선택합니다.

  3. Binary Reader를 사용할 Oracle 원본 엔드포인트를 선택합니다.

  4. [Modify]를 선택합니다.

  5. [Advanced]를 선택하고 나서 [Extra connection attributes] 텍스트 상자에 다음 코드를 추가합니다.

    useLogminerReader=N
  6. SQL-Plus와 같은 Oracle 개발자 도구를 사용하여 Oracle 엔드포인트에 연결하는 데 사용되는 AWS DMS 사용자 계정에 추가 권한을 부여합니다.

    SELECT ON V_$TRANSPORTABLE_PLATFORM

오류: Oracle CDC stopped 122301 Oracle CDC maximum retry counter exceeded.

AWS DMS에서 Oracle 보관 로그를 사용하여 변경 사항을 캡처하기 전에 서버에서 필요한 Oracle 보관 로그를 제거할 때 이 오류가 발생합니다. 데이터 서버에서 로그 보존 기간 정책을 증가시킵니다. Amazon RDS 데이터베이스에서는 다음 절차를 실행하여 로그 보존 기간을 증가시킵니다. 예를 들어, 다음 코드는 Amazon RDS DB 인스턴스에서 로그 보존 기간을 24시간으로 증가시킵니다.

exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);

보충 로깅을 Oracle 원본 엔드포인트에 자동으로 추가합니다.

기본적으로 AWS DMS에서는 보충 로깅을 끕니다. 원본 Oracle 엔드포인트에서 보충 로깅을 자동으로 켜려면, 다음을 수행합니다.

보충 로깅을 원본 Oracle 엔드포인트에 추가하려면

  1. AWS Management Console에 로그인하고 [DMS]를 선택합니다.

  2. [Endpoints]를 선택합니다.

  3. 보충 로깅을 추가할 Oracle 원본 엔드포인트를 선택합니다.

  4. [Modify]를 선택합니다.

  5. [Advanced]를 선택하고 나서 [Extra connection attributes] 텍스트 상자에 다음 코드를 추가합니다.

    addSupplementalLogging=Y
  6. [Modify]를 선택합니다.

LOB 변경 사항이 캡처되지 않음

현재 테이블에는 LOB 변경 사항을 캡처하기 위한 AWS DMS의 기본 키가 있어야 합니다. LOB를 포함하는 테이블에 기본 키가 없는 경우, LOB 변경 사항을 캡처하기 위해 취할 수 있는 몇 가지 조치가 있습니다.

  • 테이블에 기본 키를 추가합니다. 이 작업은 트리거를 사용하여 ID 열을 추가하고 이 열을 시퀀스로 채우는 것만큼이나 간편합니다.

  • 기본 키로서 시스템에서 생성한 ID를 포함하는 구체화된 테이블 보기를 생성하고 테이블 이외에 구체화된 보기를 마이그레이션합니다.

  • 논리 대기를 생성하고, 테이블에 기본 키를 추가하고, 논리 대기에서 마이그레이션합니다.

오류: ORA-12899: value too large for column <column-name>

오류 "ORA-12899: value too large for column <column-name>"의 일반적인 원인은 원본과 대상 데이터베이스에서 사용한 문자 세트의 불일치 또는 NSL 설정이 두 데이터베이스에서 다르기 때문입니다. 이 원인의 일반적인 원인은 원본 데이터베이스 NLS_LENGTH_SEMANTICS 파라미터가 CHAR로 설정되고 대상 데이터베이스 NLS_LENGTH_SEMANTICS 파라미터가 BYTE로 설정되어 있기 때문입니다.

NUMBER 데이터 형식 오해

Oracle NUMBER 데이터 형식은 정밀도와 NUMBER 크기에 따라 여러 AWS DMS 데이터 형식으로 변환됩니다. 이 변환은 Oracle 데이터베이스를 AWS DMS에서 소스로 사용AWS DMS 소스로 Linux, Unix, Windows Database용 IBM Db2(Db2 LUW)를 사용에 소개되어 있습니다. 원본 Oracle 엔드포인트에 추가 연결 속성을 사용할 경우 NUMBER 형식의 변환 방식에 영향을 미칠 수도 있습니다. 이 추가 연결 속성은 AWS DMS용에서 Oracle을 원본으로 사용 시 추가 연결 속성에 설명되어 있습니다.

MySQL별 문제 해결

다음 문제는 MySQL 데이터베이스에서 AWS DMS을(를) 사용할 때에만 적용됩니다.

이진 로깅 비활성화로 인해 Amazon RDS DB 인스턴스 엔드포인트에서 CDC 작업 실패

이 문제는 자동 백업이 비활성화되어 있기 때문에 Amazon RDS DB 인스턴스에서 발생합니다. 백업 보존 기간을 0이 아닌 값으로 설정하여 자동 백업을 활성화합니다.

작업 중에 대상 MySQL 인스턴스 연결이 끊김

작업 로그에 다음 유형의 오류가 발생하여 LOB가 MySQL 대상과 연결이 끊긴 작업이 있으면 일부 작업 설정을 조정해야 할 수도 있습니다.

[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: 08S01 NativeError: 2013 Message: [MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16-log]Lost connection to MySQL server during query [122502] ODBC general error.
[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: HY000 NativeError: 2006 Message: [MySQL][ODBC 5.3(w) Driver]MySQL server has gone away [122502] ODBC general error.

작업이 MySQL 대상과 연결이 끊기는 문제를 해결하려면, 다음 작업을 수행합니다.

  • 데이터베이스 변수 max_allowed_packet이 가장 큰 LOB를 보유할 수 있을 정도로 충분히 크게 설정되어 있는지 확인합니다.

  • 다음 변수가 큰 시간 초과 값을 갖도록 설정했는지 확인합니다. 이 변수 각각에서 최소 5분 이상의 값을 사용할 것을 제안합니다.

    • net_read_timeout

    • net_write_timeout

    • wait_timeout

    • interactive_timeout

MySQL 호환 엔드포인트에 자동 커밋 추가

대상 MySQL 호환 엔드포인트에 자동 커밋을 추가하려면

  1. AWS Management Console에 로그인하고 DMS를 선택합니다.

  2. [Endpoints]를 선택합니다.

  3. 자동 커밋을 추가할 MySQL과 호환되는 대상 엔드포인트를 선택합니다.

  4. [Modify]를 선택합니다.

  5. [Advanced]를 선택하고 나서 [Extra connection attributes] 텍스트 상자에 다음 코드를 추가합니다.

    Initstmt= SET AUTOCOMMIT=1
  6. [Modify]를 선택합니다.

대상 MySQL 호환 엔드포인트에서 외래 키 비활성화

대상 MySQL, MySQL과 호환되는 Amazon Aurora 또는 MariaDB 엔드포인트의 고급 섹션에 있는 추가 연결 속성에 다음을 추가하여 MySQL에서 외래 키 점검을 활성화할 수 있습니다.

대상 MySQL 호환 엔드포인트에서 외래 키를 비활성화하려면

  1. AWS Management Console에 로그인하고 DMS를 선택합니다.

  2. [Endpoints]를 선택합니다.

  3. 외래 키를 비활성화할 MySQL, Aurora MySQL 또는 MariaDB 대상 엔드포인트를 선택합니다.

  4. [Modify]를 선택합니다.

  5. [Advanced]를 선택하고 나서 [Extra connection attributes] 텍스트 상자에 다음 코드를 추가합니다.

    Initstmt=SET FOREIGN_KEY_CHECKS=0
  6. [Modify]를 선택합니다.

물음표로 대체된 문자

이 문제를 유발하는 가장 일반적인 상황은 원본 엔드포인트 문자가 AWS DMS에서 지원되지 않는 문자 집합으로 인코딩되는 경우입니다. 예를 들어 버전 3.1.1 이전의 AWS DMS 엔진 버전은 UTF8MB4 문자 집합을 지원하지 않습니다.

"Bad event" 로그 항목

마이그레이션 로그에서 "Bad event" 항목은 대개 원본 데이터베이스 엔드포인트에서 지원되지 않는 DDL 작업이 시도되었음을 나타냅니다. 지원되지 않는 DDL 작업은 복제 인스턴스가 건너뛸 수 없는 이벤트를 유발하므로 잘못된 이벤트가 로깅됩니다. 이 문제를 해결하려면, 처음부터 작업을 다시 시작하고, 테이블을 로드하고, 지원되지 않는 DDL 작업이 발행된 시점의 변경 사항을 캡처하기 시작합니다.

MySQL 5.5로 변경 데이터 캡처

Amazon RDS MySQL 호환 데이터베이스를 위한 AWS DMS CDC(변경 데이터 캡처)에는 전체 이미지 행 기반 바이너리 로깅이 필요하며, 이는 MySQL 버전 5.5 이하에서 지원되지 않습니다. AWS DMS CDC를 사용하려면 Amazon RDS DB 인스턴스를 MySQL 버전 5.6으로 업그레이드해야 합니다.

Amazon RDS DB 인스턴스를 위한 이진 로그 보존 기간 증가

AWS DMS에서는 변경 데이터 캡처를 위한 바이너리 로그 파일 보존이 필요합니다. Amazon RDS 인스턴스에서 로그 보존 기간을 연장하려면, 다음 절차를 실행합니다. 다음은 이진 로그 보존 기간을 24시간으로 연장하는 예제입니다.

call mysql.rds_set_configuration('binlog retention hours', 24);

로그 메시지: 원본 데이터베이스의 일부 변경 사항은 대상 데이터베이스에 적용될 때 영향이 전혀 없었습니다.

AWS DMS이(가) MySQL 데이터베이스 열의 값을 기존 값으로 업데이트하면, zero rows affected의 메시지가 MySQL에서 반환됩니다. 이 동작은 대체 값이 현재 값과 동일하더라도 하나의 행을 업데이트하는 Oracle 및 SQL Server와 같은 다른 데이터베이스 엔진과 다릅니다.

오류: Identifier too long

다음 오류는 식별자가 너무 길 때 발생합니다.

TARGET_LOAD E: RetCode: SQL_ERROR SqlState: HY000 NativeError: 1059 Message: MySQLhttp://ODBC 5.3(w) Driverhttp://mysqld-5.6.10Identifier name '<name>' is too long 122502 ODBC general error. (ar_odbc_stmt.c:4054)

AWS DMS이(가) 대상 데이터베이스에서 테이블과 기본 키를 생성하도록 설정된 경우 원본 데이터베이스에서 사용되는 기본 키에 이제 동일한 이름을 사용하지 않습니다. 대신, AWS DMS은(는) 테이블 이름을 기반으로 기본 키 이름을 생성합니다. 테이블 이름이 길면, 자동 생성된 식별자는 MySQL에 허용된 한도보다 길 수 있습니다. 이 문제를 해결하려면, 이제 대상 테이블에서 테이블과 기본 키를 미리 생성하고 작업을 사용할 때 작업에서 [Target table preparation mode]를 [Do nothing] 또는 [Truncate]로 설정하여 대상 테이블을 채웁니다.

오류: 지원되지 않는 문자 집합으로 인해 필드 데이터 변환 실패

다음 오류는 지원되지 않는 문자 집합으로 인해 필드 데이터 변환이 실패할 때 발생합니다.

"[SOURCE_CAPTURE ]E: Column '<column name>' uses an unsupported character set [120112] A field data conversion failed. (mysql_endpoint_capture.c:2154)

이 오류는 흔히 UTF8MB4 인코딩을 사용한 테이블이나 데이터베이스로 인해 발생합니다. 버전 3.1.1 이전의 AWS DMS 엔진 버전은 UTF8MB4 문자 집합을 지원하지 않습니다. 또한, 연결과 관련된 데이터베이스의 파라미터를 확인합니다. 다음 명령은 이 파라미터를 확인하는 데 사용할 수 있습니다.

SHOW VARIABLES LIKE '%char%';

오류: Codepage 1252 to UTF8 [120112] A field data conversion failed

원본 MySQL 데이터베이스에 codepage-1252 문자가 없을 경우 마이그레이션 중에 다음과 같은 오류가 발생할 수 있습니다.

[SOURCE_CAPTURE ]E: Error converting column 'column_xyz' in table 'table_xyz with codepage 1252 to UTF8 [120112] A field data conversion failed. (mysql_endpoint_capture.c:2248)

차선책으로 CharsetMapping 추가 연결 속성을 원본 MySQL 엔드포인트와 함께 사용하여 문자 세트 매핑을 지정할 수 있습니다. 이 추가 연결 속성을 추가하면 AWS DMS 마이그레이션 작업을 처음부터 다시 시작해야 할 수도 있습니다.

예를 들어 다음과 같은 추가 연결 속성을 MySQL 원본 엔드포인트에 사용할 수 있습니다. 이때 원본 문자 세트는 utf8 또는 latin1입니다. 65001은 UTF8 코드 페이지 식별자입니다.

CharsetMapping=utf8,65001 CharsetMapping=latin1,65001

PostgreSQL별 문제 해결

다음 문제는 PostgreSQL 데이터베이스에서 AWS DMS을(를) 사용할 때에만 적용됩니다.

잘리는 JSON 데이터 형식

AWS DMS에서는 PostgreSQL의 JSON 데이터 형식을 LOB 데이터 형식 열로 간주합니다. 다시 말해서 제한된 LOB 모드를 사용할 때 LOB 크기 제한이 JSON 데이터에 적용됨을 의미합니다. 예를 들면, 제한된 LOB 모드가 4096KB로 설정되는 경우 4096KB보다 큰 JSON 데이터는 4096KB 크기로 잘리며 PostgreSQL에서 검증 테스트가 실패합니다.

예를 들어, 다음 로그 정보는 제한된 LOB 모드 설정 및 실패한 검증으로 인해 잘린 JSON을 표시합니다.

03:00:49 2017-09-19T03:00:49 [TARGET_APPLY ]E: Failed to execute statement: 'UPDATE "public"."delivery_options_quotes" SET "id"=? , "enabled"=? , "new_cart_id"=? , "order_id"=? , "user_id"=? , "zone_id"=? , "quotes"=? , "start_at"=? , "end_at"=? , "last_quoted_at"=? , "created_at"=? , "updated_at"=? WHERE "id"=? ' [1022502] (ar_odbc_stmt 2017-09-19T03:00:49 [TARGET_APPLY ]E: Failed to execute statement: 'UPDATE "public"."delivery_options_quotes" SET "id"=? , "enabled"=? , "new_cart_id"=? , "order_id"=? , "user_id"=? , "zone_id"=? , "quotes"=? , "start_at"=? , "end_at"=? , "last_quoted_at"=? , "created_at"=? , "updated_at"=? WHERE "id"=? ' [1022502] (ar_odbc_stmt.c:2415)  03:00:49 2017-09-19T03:00:49 [TARGET_APPLY ]E: RetCode: SQL_ERROR SqlState: 22P02 NativeError: 1 Message: ERROR: invalid input syntax for type json;, Error while executing the query [1022502] (ar_odbc_stmt.c:2421) 2017-09-19T03:00:49 [TARGET_APPLY ]E: RetCode: SQL_ERROR SqlState: 22P02 NativeError: 1 Message: ERROR: invalid input syntax for type json;, Error while executing the query [1022502] (ar_odbc_stmt.c:2421)

사용자 정의 데이터 형식 열이 올바르게 마이그레이션되지 않음

PostgreSQL 소스에서 복제할 때 AWS DMS는 모든 열에서 동일한 데이터 형식을 사용하여 대상 테이블을 생성하고, 이때 사용자 정의 데이터 형식을 사용한 열은 제외됩니다. 그러한 경우에 데이터 형식은 대상에서 "character varying"으로 생성됩니다.

오류: 생성하도록 선택된 스키마가 없음

오류 "SQL_ERROR SqlState: 3F000 NativeError: 7 Message: ERROR: no schema has been selected to create in"은 JSON 테이블 매핑에 스키마의 와일드 카드 값이 포함되어 있지만 원본 데이터베이스가 값을 지원하지 않을 때 발생할 수 있습니다.

테이블 삭제와 업데이트가 CDC를 사용하여 복제되지 않음

원본 테이블에 기본 키가 없는 경우 CDC(변경 데이터 캡처) 중에 삭제 및 업데이트 작업이 무시됩니다. AWS DMS은(는) 기본 키가 있는 PostgreSQL 테이블에 대한 CDC(변경 데이터 캡처)를 지원합니다. 테이블에 기본 키가 없는 경우 WAL 로그에 데이터베이스 행의 이전 이미지가 포함되지 않으며 AWS DMS이(가) 테이블을 업데이트할 수 없습니다. 복제할 작업을 삭제하려면 원본에서 기본 키를 생성합니다.

자르기 문이 전파되지 않고 있습니다.

CDC(변경 데이터 캡처)를 사용할 때 TRUNCATE 작업이 AWS DMS에서 지원되지 않습니다.

PostgreSQL에서 DDL이 캡처되지 않음

다음 [Extra Connection Attribute] 문을 추가하여 PostgreSQL 문 엔드포인트가 DDL 문을 캡처하지 않도록 할 수 있습니다. [Extra Connection Attribute] 파라미터는 원본 엔드포인트의 [Advanced] 탭에서 사용할 수 있습니다.

captureDDLs=N

DDL 캡처를 위해 데이터베이스 객체가 생성되는 스키마 선택

DDL 캡처와 관련된 데이터베이스 객체가 생성되는 스키마를 제어할 수 있습니다. 다음 [Extra Connection Attribute] 문을 추가합니다. [Extra Connection Attribute] 파라미터는 대상 엔드포인트의 [Advanced] 탭에서 사용할 수 있습니다.

ddlArtifactsSchema=xyzddlschema

PostgreSQL로 마이그레이션한 후 Oracle 테이블 누락

Oracle 기본값을 대문자 테이블 이름으로 설정하고 PostgreSQL 기본값을 소문자 테이블 이름으로 설정합니다. Oracle에서 PostgreSQL로 마이그레이션할 때 테이블 이름의 대소문자를 변환하기 위해서는 작업의 테이블 매핑 섹션에서 변환 규칙을 제공해야 할 가능성이 가장 높습니다.

테이블과 데이터를 계속 액세스할 수 있습니다. 즉, 변환 규칙을 사용하지 않고 테이블을 마이그레이션하여 테이블 이름의 대소문자를 전환하는 경우, 테이블 이름을 참조할 때 테이블 이름을 따옴표로 묶어야 합니다.

원본으로 보기를 사용한 작업에서 복사된 행이 없음

PostgreSQL 원본 엔드포인트로서 보기가 AWS DMS에서 지원되지 않습니다.

Microsoft SQL Server별 문제 해결

다음 문제는 Microsoft SQL Server 데이터베이스에서 AWS DMS를 사용할 때에만 적용됩니다.

AWS DMS 사용자 계정이 CDC를 사용하기 위한 특수 권한

AWS DMS에 사용되는 사용자 계정에는 변경 데이터 캡처(CDC)를 사용할 때 올바르게 작동할 수 있도록 SQL Server SysAdmin 역할이 필요합니다. SQL Server용 CDC는 EC2 인스턴스에서 온프레미스 데이터베이스 또는 데이터베이스에서만 사용할 수 있습니다.

SQL Server 데이터베이스에서 변경 사항을 캡처하면서 발생하는 오류

변경 데이터 캡처(CDC) 중에 발생하는 오류는 흔히 사전 요구 사항 중 하나에 부합하지 않음을 나타낼 수 있습니다. 예를 들어, 자주 간과되는 사전 요구 사항은 전체 데이터베이스 백업입니다. 이 작업 로그에는 다음 오류와 함께 이러한 누락이 나타납니다.

SOURCE_CAPTURE E: No FULL database backup found (under the 'FULL' recovery model). To enable all changes to be captured, you must perform a full database backup. 120438 Changes may be missed. (sqlserver_log_queries.c:2623)

Microsoft SQL Server 데이터베이스를 AWS DMS에서 소스로 사용에서 원본으로서 SQL Server를 위해 나열된 사전 요구 사항을 검토합니다.

자격 증명 열 누락

AWS DMS는 대상 스키마를 생성할 때 자격 증명 열을 지원하지 않습니다. 초기 로드가 완료된 후 자격 증명 열을 추가해야 합니다.

오류: SQL Server Does Not Support Publications

SQL Server Express를 원본 엔드포인트로 사용할 때 다음 오류가 생성됩니다.

RetCode: SQL_ERROR SqlState: HY000 NativeError: 21106 Message: This edition of SQL Server does not support publications.

AWS DMS는 현재 SQL Server Express를 원본 또는 대상으로 지원하지 않습니다.

변경 사항이 대상에 표시되지 않음

AWS DMS에서 변경 사항을 일관성 있게 캡처하려면 원본 SQL Server 데이터베이스가 'FULL' 또는 'BULK LOGGED' 데이터 복구 모델에 있어야 합니다. 'SIMPLE' 모델은 지원되지 않습니다.

SIMPLE 복구 모델은 사용자가 데이터베이스를 복구하도록 허용하는 데 필요한 최소한의 정보를 로깅합니다. 체크포인트가 발생하면 모든 비활성 로그 항목은 자동으로 잘립니다. 모든 작업은 계속해서 로깅되지만, 체크포인트가 발생하는 즉시 로그가 자동으로 잘립니다. 즉, 로그는 다시 사용할 수 있게 되고 이전 로그 항목을 덮어쓸 수 있습니다. 로그 항목을 덮어쓸 때 변경 사항을 캡처할 수 없으며, 그 이유는 AWS DMS가 SIMPLE 데이터 복구 모델을 지원하지 않기 때문입니다. SQL Server를 원본으로 사용할 때 다른 필요한 사전 요구 사항에 대한 정보는 Microsoft SQL Server 데이터베이스를 AWS DMS에서 소스로 사용를 참조하십시오.

Amazon Redshift별 문제 해결

다음 문제는 Amazon Redshift 데이터베이스에서 AWS DMS를 사용할 때에만 적용됩니다.

AWS DMS 복제 인스턴스와 다른 리전에서 Amazon Redshift 클러스터에 로드

이 작업은 수행할 수 없습니다. AWS DMS에서는 AWS DMS 복제 인스턴스와 Redshift 클러스터가 동일한 리전에 있어야 합니다.

오류: Relation "awsdms_apply_exceptions" already exists

오류 "Relation "awsdms_apply_exceptions" already exists"는 흔히 Redshift 엔드포인트가 PostgreSQL 엔드포인트로서 지정될 때 발생합니다. 이 문제를 해결하려면, 엔드포인트를 수정하고 [Target engine]을 "redshift"로 변경합니다.

awsdms_changes"로 시작하는 테이블 이름이 있는 오류

"awsdms_changes"로 시작하는 테이블 이름과 관련된 오류 메시지는 흔히 데이터를 동일한 Amazon Redshift 클러스터로 로드하려고 하는 작업 2개가 동시에 실행되고 있을 때 발생합니다. 임시 테이블 이름을 지정하는 방식으로 인해 동일한 테이블을 업데이트할 때 동시 작업이 충돌할 수 있습니다.

dms.awsdms_changes000000000XXXX와 같은 이름과 함께 클러스터에 테이블 표시

S3에 저장된 파일에서 데이터가 로드되면 AWS DMS가 임시 테이블을 생성합니다. 이 임시 테이블의 이름에는 접두사 "dms.awsdms_changes"가 있습니다. 처음 로드될 때와 최종 대상 테이블에 배치되기 전에 AWS DMS가 데이터를 복원할 수 있도록 이 테이블이 필요합니다.

Amazon Redshift 사용에 필요한 권한

Amazon Redshift와 함께 AWS DMS를 사용하려면 Amazon Redshift에 액세스하기 위해 사용하는 사용자 계정에 다음 권한이 있어야 합니다.

  • CRUD(선택, 삽입, 업데이트, 삭제)

  • 대량 로드

  • 생성 변경, 삭제(필요한 경우 작업의 정의에 따라)

대상으로서 Amazon Redshift를 사용할 때 필요한 모든 사전 요구 사항을 보려면, AWS Database Migration Service에서 Amazon Redshift 데이터베이스를 대상으로 사용을 참조하십시오.

Amazon Aurora MySQL 관련 문제 해결

다음 문제는 Amazon Aurora MySQL 데이터베이스에서 AWS DMS를 사용할 때에만 적용됩니다.

오류: CHARACTER SET UTF8 fields terminated by ',' enclosed by '"' lines terminated by '\n'

Amazon Aurora MySQL을 대상으로 사용하고 로그에 다음과 같은 오류가 나타나면 이는 대개 SQL_MODE 파라미터의 일부로 ANSI_QUOTES가 있음을 나타냅니다. SQL_MODE 파라미터의 일부로서 ANSI_QUOTES가 있으면 큰따옴표가 일반 따옴표로 처리되어 작업을 실행할 때 문제를 발생시킬 수 있습니다. 이 오류를 수정하려면, SQL_MODE 파라미터에서 ANSI_QUOTES를 제거합니다.

2016-11-02T14:23:48 [TARGET_LOAD ]E: Load data sql statement. load data local infile "/rdsdbdata/data/tasks/7XO4FJHCVON7TYTLQ6RX3CQHDU/data_files/4/LOAD000001DF.csv" into table `VOSPUSER`.`SANDBOX_SRC_FILE` CHARACTER SET UTF8 fields terminated by ',' enclosed by '"' lines terminated by '\n'( `SANDBOX_SRC_FILE_ID`,`SANDBOX_ID`, `FILENAME`,`LOCAL_PATH`,`LINES_OF_CODE`,`INSERT_TS`,`MODIFIED_TS`,`MODIFIED_BY`, `RECORD_VER`,`REF_GUID`,`PLATFORM_GENERATED`,`ANALYSIS_TYPE`,`SANITIZED`,`DYN_TYPE`, `CRAWL_STATUS`,`ORIG_EXEC_UNIT_VER_ID` ) ; (provider_syntax_manager.c:2561)