기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
에서 마이그레이션 작업 문제 해결 AWS Database Migration Service
다음에는 AWS Database Migration Service (AWS DMS) 관련 문제 해결에 대한 항목이 나와 있습니다. 이 항목은 양쪽 엔드포인트 AWS DMS 데이터베이스와 선택된 엔드포인트 데이터베이스를 모두 사용하는 일반적인 문제를 해결하는 데 도움이 될 수 있습니다.
AWS Support 케이스를 연 경우, 지원 엔지니어가 엔드포인트 데이터베이스 구성 중 하나와 관련된 잠재적 문제를 식별할 수 있습니다. 엔지니어가 데이터베이스에 대한 진단 정보를 반환하는 지원 스크립트를 실행할 것을 요청할 수도 있습니다. 이러한 유형의 지원 스크립트에서 진단 정보를 다운로드, 실행, 업로드하는 방법에 대한 자세한 내용은 에서 진단 지원 스크립트 사용 AWS DMS 섹션을 참조하세요.
문제 해결을 위해 복제 인스턴스에서 추적 및 덤프 파일을 AWS DMS 수집합니다. 문제 해결이 필요한 문제가 발생하는 경우 AWS Support에 이러한 파일을 제공할 수 있습니다. 기본적으로 30일이 DMS 지난 추적 및 덤프 파일을 제거합니다. 추적 및 덤프 파일 수집을 거부하려면 AWS Support에 케이스를 여십시오.
주제
- 마이그레이션 태스크가 느리게 실행됨
- 태스크 상태 표시줄이 움직이지 않음
- 태스크가 완료되었지만 아무것도 마이그레이션되지 않음
- 외부 키와 보조 인덱스 누락
- AWS DMS 로그를 CloudWatch 생성하지 않습니다.
- Amazon에 연결하는 중 문제가 발생했습니다. RDS
- 네트워킹 문제 발생
- CDC전체 로드 후 멈춤
- 태스크 재시작 시 프라이머리 키 위반 오류 발생
- 스키마 초기 로드 실패
- 알 수 없는 오류로 인해 태스크 실패
- 시작부터 작업 재시작 시 테이블 로드
- 태스크당 테이블 수로 인해 문제 발생
- 열에 기본 키가 생성되면 작업이 실패합니다. LOB
- 프라이머리 키가 없는 대상 테이블에서 중복 레코드 발생
- 소스 엔드포인트가 예약된 IP 범위에 속함
- Amazon Athena 쿼리에서 타임스탬프가 깨져 보임
- Oracle 관련 문제 해결
- My 관련 문제 해결 SQL
- Postgre와 관련된 문제 해결 SQL
- 마이크로소프트 SQL 서버 관련 문제 해결
- Amazon Redshift 관련 문제 해결
- Amazon Aurora My와 관련된 문제 해결 SQL
- 관련 문제 해결 SAP ASE
- IBMDb2 관련 문제 해결
- 에서 지연 문제 해결 AWS Database Migration Service
- 에서 진단 지원 스크립트 사용 AWS DMS
- AWS DMS 진단 지원 AMI 사용
마이그레이션 태스크가 느리게 실행됨
마이그레이션 작업이 느리게 실행되거나 연속 작업이 초기 작업보다 느리게 실행되도록 만들 수 있는 여러 문제가 있습니다.
마이그레이션 작업이 느리게 실행되는 가장 일반적인 이유는 AWS DMS 복제 인스턴스에 할당된 리소스가 부족하기 때문입니다. 인스턴스에서 실행 중인 작업에 필요한 리소스가 충분한지 확인하려면 복제 인스턴스의 사용, 메모리CPU, 스왑 파일 등을 IOPS 확인하세요. 예를 들어, 엔드포인트로서 Amazon Redshift에서 여러 태스크를 실행하면 I/O가 집중적으로 사용됩니다. 마이그레이션 효율성을 높이기 IOPS 위해 복제 인스턴스를 늘리거나 작업을 여러 복제 인스턴스로 분할할 수 있습니다.
복제 인스턴스 크기 결정에 대한 자세한 내용은 복제 인스턴스에 가장 적합한 크기 선택 섹션을 참조하세요.
다음 작업을 수행하여 초기 마이그레이션 로드 속도를 촉진할 수 있습니다.
-
대상이 Amazon RDS DB 인스턴스인 경우 대상 DB 인스턴스에 다중 AZ가 활성화되어 있지 않은지 확인하십시오.
-
로드 중에 대상 데이터베이스에서 자동 백업 또는 로깅 기능을 끄고, 마이그레이션이 완료된 후 이러한 기능을 다시 켭니다.
-
대상에서 기능을 사용할 수 있는 경우 IOPS provisioned를 사용하십시오.
-
마이그레이션 데이터에 포함된 LOBs 경우 작업이 마이그레이션에 LOB 맞게 최적화되었는지 확인하세요. 최적화에 대한 자세한 내용은 LOBs 을 참조하십시오대상 메타데이터 작업 설정.
태스크 상태 표시줄이 움직이지 않음
작업 상태 표시줄은 작업 진행률의 추정치를 나타냅니다. 이 추정치의 품질은 소스 데이터베이스의 테이블 통계 품질에 따라 달라지며, 테이블 통계 품질이 좋을수록 추정 정확도가 높아집니다.
추정 행 통계가 없는 테이블이 하나뿐인 작업의 경우 예상 완료율을 제공할 AWS DMS 수 없습니다. 이 경우 태스크 상태와 로드되는 행 표시를 사용하여 태스크가 실제로 실행 및 진행되고 있다는 것을 확인할 수 있습니다.
태스크가 완료되었지만 아무것도 마이그레이션되지 않음
태스크가 완료된 후 아무것도 마이그레이션되지 않은 경우 다음을 수행합니다.
-
엔드포인트를 생성한 사용자에게 마이그레이션하려는 테이블에 대한 읽기 권한이 있는지 확인합니다.
-
마이그레이션하려는 객체가 테이블인지 확인합니다. 보기인 경우, 테이블 매핑을 업데이트하고 객체 로케이터를 'view' 또는 'all'로 지정합니다. 자세한 내용은 콘솔에서 테이블 선택 및 변환 규칙 지정 단원을 참조하십시오.
외부 키와 보조 인덱스 누락
AWS DMS 테이블, 기본 키, 경우에 따라 고유 색인을 만들지만 원본에서 데이터를 효율적으로 마이그레이션하는 데 필요하지 않은 다른 객체는 만들지 않습니다. 예를 들어 보조 인덱스, 기본이 아닌 키 제약 조건 또는 데이터 기본값을 생성하지 않습니다.
데이터베이스에서 보조 객체를 마이그레이션하려면, 원본 데이터베이스와 동일한 데이터베이스 엔진으로 이동할 경우 데이터베이스의 기본 도구를 사용합니다. 보조 객체를 마이그레이션하기 위해 소스 데이터베이스가 사용하는 것과 다른 데이터베이스 엔진으로 마이그레이션할 경우 AWS Schema Conversion Tool (AWS SCT)을 사용합니다.
AWS DMS 로그를 CloudWatch 생성하지 않습니다.
복제 작업에서 CloudWatch 로그가 생성되지 않는 경우 계정에 dms-cloudwatch-logs-role
역할이 있는지 확인하세요. 이 역할이 없는 경우 다음을 수행하여 생성합니다.
에 AWS Management Console 로그인하고 에서 IAM 콘솔을 여십시오 https://console.aws.amazon.com/iam/
. 역할 탭을 선택합니다. 역할 생성을 선택합니다.
신뢰할 수 있는 유형의 엔터티 선택 섹션에서 AWS 서비스를 선택합니다.
사용 사례 선택 섹션에서 원하는 것을 선택합니다 DMS.
다음: 권한을 선택합니다.
검색
AmazonDMSCloudWatchLogsRole
필드에 를 입력하고 A 옆의 체크박스를 선택합니다 mazonDMSCloudWatchLogsRole. 이렇게 하면 액세스 AWS DMS 권한이 CloudWatch 부여됩니다.다음: 태그를 선택합니다.
다음: 검토를 선택합니다.
역할 이름에
dms-cloudwatch-logs-role
을 입력합니다. 이 이름은 대/소문자를 구분합니다.역할 생성을 선택합니다.
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 주소를 허용하고 엔드포인트가 사용하는 보안 그룹에 규칙을 생성할 수 있습니다.
원본 엔드포인트가 복제 인스턴스에서 사용하지 않는 위치에 있음 (인터넷 게이트웨이 사용) — VPC 보안 그룹에는 인터넷 게이트웨이에 적합하지 않은 트래픽을 보내는 라우팅 규칙이 포함되어야 합니다. VPC VPC 이 구성에서 엔드포인트와의 연결이 복제 인스턴스의 퍼블릭 IP 주소에서 오는 것으로 나타납니다.
원본 엔드포인트가 복제 인스턴스에서 사용하지 않는 위치에 있음 (NAT게이트웨이 사용) — 단일 Elastic Network 인터페이스에 바인딩된 단일 엘라스틱 IP 주소를 사용하여 네트워크 주소 변환 (NAT) 게이트웨이를 구성할 수 있습니다. VPC 이 NAT 게이트웨이는 NAT 식별자 (nat-#####) 를 받습니다.
경우에 따라 에는 인터넷 게이트웨이 대신 해당 NAT 게이트웨이로 가는 기본 경로가 VPC 포함됩니다. 이러한 경우 복제 인스턴스는 대신 NAT 게이트웨이의 퍼블릭 IP 주소를 사용하여 데이터베이스 엔드포인트에 연결하는 것으로 보입니다. 여기서 데이터베이스 엔드포인트 외부의 수신은 복제 인스턴스의 퍼블릭 IP NAT 주소 대신 해당 주소에서의 수신을 VPC 허용해야 합니다.
자체 온프레미스 네임 서버 사용에 대한 자세한 내용은 자체 온프레미스 이름 서버 사용 섹션을 참조하세요.
CDC전체 로드 후 멈춤
느리거나 중단된 복제 변경은 여러 AWS DMS 설정이 서로 충돌할 때 전체 로드 마이그레이션 이후에 나타날 수 있습니다.
예를 들어 대상 테이블 준비 모드 파라미터가 아무 작업 안 함 또는 자르기로 설정되어 있다고 가정해 보겠습니다. 이 경우 기본 및 고유 인덱스 생성을 포함하여 대상 테이블에서 설정을 수행하지 않도록 지시했습니다 AWS DMS . 대상 테이블에 기본 또는 고유 키를 생성하지 않은 경우 업데이트할 때마다 전체 테이블 스캔을 수행하십시오. AWS DMS 이런 접근 방식은 성능에 상당한 영향을 미칠 수 있습니다.
태스크 재시작 시 프라이머리 키 위반 오류 발생
이 오류는 데이터가 이전 마이그레이션 작업의 대상 데이터베이스에 있을 때 발생할 수 있습니다. 대상 테이블 준비 모드 옵션이 아무 작업도 수행하지 AWS DMS 않음으로 설정된 경우, 이전 작업에서 삽입한 데이터 정리를 포함하여 대상 테이블에서 어떠한 준비도 수행하지 않습니다.
작업을 다시 시작하고 이러한 오류를 방지하려면, 이전 태스크 실행에서 대상 테이블에 삽입된 행을 제거합니다.
스키마 초기 로드 실패
경우에 따라 Operation:getSchemaListDetails:errType=, status=0, errMessage=,
errDetails=
오류가 발생하여 스키마의 초기 로드가 실패할 수 있습니다.
이러한 경우 에서 원본 엔드포인트에 연결하는 AWS DMS 데 사용하는 사용자 계정에는 필요한 권한이 없습니다.
알 수 없는 오류로 인해 태스크 실패
알 수 없는 유형의 오류가 발생하는 원인은 다양할 수 있습니다. 하지만 AWS DMS 복제 인스턴스에 할당된 리소스가 충분하지 않아 문제가 발생하는 경우가 종종 있습니다.
복제 인스턴스에 마이그레이션을 수행하는 데 필요한 리소스가 충분한지 확인하려면 인스턴스의 메모리CPU, 스왑 파일 및 사용량을 확인하세요IOPS. 모니터링에 대한 자세한 내용은 AWS Database Migration Service 지표 섹션을 참조하십시오.
시작부터 작업 재시작 시 테이블 로드
AWS DMS 테이블의 초기 로드가 완료되지 않은 경우 처음부터 테이블 로드를 다시 시작합니다. 작업을 다시 시작하면 초기 AWS DMS 로드가 완료되지 않은 상태에서 테이블을 처음부터 다시 로드합니다.
태스크당 테이블 수로 인해 문제 발생
복제 태스크당 테이블 수에 대한 제한은 설정되어 있지 않습니다. 그러나 한 태스크의 테이블 수는 60,000개 미만으로 제한하는 것이 좋습니다. 단일 작업에서 60,000개 이상의 테이블을 사용할 때 리소스에 흔히 병목 현상이 발생할 수 있습니다.
열에 기본 키가 생성되면 작업이 실패합니다. LOB
FULLLOB또는 LIMITED LOB 모드에서는 LOB 데이터 유형인 기본 키의 복제를 AWS DMS 지원하지 않습니다.
DMS처음에는 열이 null인 행을 마이그레이션한 다음 나중에 LOB 열을 업데이트합니다. LOB 따라서 LOB 열에 기본 키를 만들면 기본 키가 null이 될 수 없으므로 초기 삽입이 실패합니다. 이 문제를 해결하려면 다른 열을 기본 키로 추가하고 해당 열에서 기본 키를 제거하십시오. LOB
프라이머리 키가 없는 대상 테이블에서 중복 레코드 발생
전체 로드 및 CDC 작업을 실행하면 기본 키나 고유 인덱스가 없는 대상 테이블에 중복 레코드가 생성될 수 있습니다. 전체 로드 및 CDC 작업 중에 대상 테이블의 레코드가 중복되지 않도록 하려면 대상 테이블에 기본 키나 고유 인덱스가 있는지 확인하십시오.
소스 엔드포인트가 예약된 IP 범위에 속함
AWS DMS 원본 데이터베이스가 예약된 IP 범위인 192.168.0.0/24 내의 IP 주소를 사용하는 경우 원본 엔드포인트 연결 테스트가 실패합니다. 다음 단계에서는 가능한 해결 방법을 제공합니다.
-
192.168.0.0/24에서 원본 데이터베이스와 통신할 수 있는 예약 범위 내에 있지 않은 Amazon EC2 인스턴스 하나를 찾으십시오.
socat 프록시를 설치하고 실행합니다. 다음은 그 한 예입니다.
yum install socat socat -d -d -lmlocal2 tcp4-listen:database port,bind=0.0.0.0,reuseaddr,fork tcp4:source_database_ip_address:database_port &
Amazon EC2 인스턴스 IP 주소와 앞에 제공된 데이터베이스 포트를 AWS DMS 엔드포인트로 사용합니다. 엔드포인트에 데이터베이스 포트 AWS DMS 액세스를 허용하는 보안 그룹이 있는지 확인하십시오. 단, DMS 작업이 실행되는 동안에는 프록시를 실행해야 합니다. 사용 사례에 따라, 프록시 설정을 자동화해야 할 수도 있습니다.
Amazon Athena 쿼리에서 타임스탬프가 깨져 보임
Athena 쿼리에서 타임스탬프가 제대로 표시되지 않는 경우 AWS Management Console 또는 ModifyEndpoint작업을 사용하여 Amazon S3 엔드포인트의 parquetTimestampInMillisecond
값을 로 설정하십시오. true
자세한 내용은 S3Settings 섹션을 참조하세요.
Oracle 관련 문제 해결
다음에서는 Oracle 데이터베이스 AWS DMS 사용과 관련된 문제 해결에 대해 알아볼 수 있습니다.
주제
- 보기에서 데이터 가져오기
- Oracle LOBs 12c에서 마이그레이션하기
- LogMiner오라클과 바이너리 리더 간 전환
- 오류: 오라클이 CDC 중지했습니다. 122301 oracle CDC 최대 재시도 카운터를 초과했습니다.
- 보충 로깅을 Oracle 소스 엔드포인트에 자동으로 추가합니다.
- LOB변경 사항이 캡처되지 않습니다.
- 오류: ORA -12899: 값이 열에 비해 너무 큽니다.column-name
- NUMBER데이터 유형이 잘못 해석되고 있습니다.
- 전체 로드 중 레코드 누락
- 테이블 오류
- 오류: Cannot retrieve Oracle archived Redo log destination ids
- Oracle 재실행 로그 또는 아카이브 로그의 읽기 성능 평가
보기에서 데이터 가져오기
보기에서 데이터를 끌어와서 지속적인 복제에 사용할 수 없습니다. 보기에서 데이터를 추출하려면 Oracle 소스 엔드포인트 페이지의 엔드포인트 설정 섹션에 아래와 같은 코드를 추가해야 합니다. 보기에서 데이터를 추출하면 보기가 대상 스키마에서 테이블로 표시됩니다.
"ExposeViews": true
Oracle LOBs 12c에서 마이그레이션하기
AWS DMS Oracle 데이터베이스의 변경 사항을 캡처하는 데는 바이너리 리더와 오라클이라는 두 가지 방법을 사용할 수 있습니다. LogMiner 기본적으로 LogMiner Oracle을 AWS DMS 사용하여 변경 사항을 캡처합니다. 하지만 Oracle 12c에서는 오라클이 LOB 열을 LogMiner 지원하지 않습니다. Oracle 12c에서 LOB 열의 변경 내용을 캡처하려면 바이너리 리더를 사용하십시오.
LogMiner오라클과 바이너리 리더 간 전환
AWS DMS 원본 Oracle 데이터베이스의 변경 내용을 캡처하는 데 바이너리 리더와 Oracle이라는 두 가지 방법을 사용할 수 LogMiner 있습니다. LogMiner Oracle이 기본값입니다. 변경 캡처를 위해 Binary Reader 사용으로 전환하려면, 다음 작업을 수행합니다.
변경 캡처를 위해 Binary Reader를 사용하려면
-
https://console.aws.amazon.com/dms/v2/에서 AWS Management Console
로그인하고 AWS DMS 콘솔을 엽니다. 엔드포인트를 선택합니다.
Binary Reader를 사용할 Oracle 소스 엔드포인트를 선택합니다.
수정을 선택합니다.
고급을 선택한 다음, 추가 연결 속성에 대해 아래의 코드를 추가합니다.
useLogminerReader=N
SQL-Plus와 같은 Oracle 개발자 도구를 사용하여 Oracle 엔드포인트에 연결하는 데 사용되는 AWS DMS 사용자 계정에 다음과 같은 추가 권한을 부여하십시오.
SELECT ON V_$TRANSPORTABLE_PLATFORM
오류: 오라클이 CDC 중지했습니다. 122301 oracle CDC 최대 재시도 카운터를 초과했습니다.
이 오류는 필요한 Oracle 아카이브 로그를 사용하여 변경 사항을 캡처하기 전에 AWS DMS 서버에서 제거된 경우 발생합니다. 데이터 서버에서 로그 보존 기간 정책을 증가시킵니다. Amazon RDS 데이터베이스의 경우 다음 절차를 실행하여 로그 보존을 늘리십시오. 예를 들어 다음 코드는 Amazon RDS DB 인스턴스의 로그 보존 시간을 24시간으로 늘립니다.
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
보충 로깅을 Oracle 소스 엔드포인트에 자동으로 추가합니다.
기본적으로 추가 AWS DMS 로깅은 꺼져 있습니다. 원본 Oracle 엔드포인트에서 보충 로깅을 자동으로 켜려면, 다음을 수행합니다.
보충 로깅을 소스 Oracle 엔드포인트에 추가하려면
-
https://console.aws.amazon.com/dms/v2/에서 AWS Management Console
로그인하고 AWS DMS 콘솔을 엽니다. 엔드포인트를 선택합니다.
보충 로깅을 추가할 Oracle 원본 엔드포인트를 선택합니다.
수정을 선택합니다.
고급을 선택하고 나서 추가 연결 속성 텍스트 상자에 다음 코드를 추가합니다.
addSupplementalLogging=Y
수정을 선택합니다.
LOB변경 사항이 캡처되지 않습니다.
현재 테이블에는 LOB 변경 사항을 AWS DMS 캡처하기 위한 기본 키가 있어야 합니다. 를 포함하는 테이블에 기본 키가 LOBs 없는 경우 LOB 변경 사항을 캡처하기 위해 취할 수 있는 몇 가지 조치가 있습니다.
테이블에 기본 키를 추가합니다. 이 작업은 트리거를 사용하여 ID 열을 추가하고 이 열을 시퀀스로 채우는 것만큼이나 간편합니다.
프라이머리 키로서 시스템에서 생성한 ID를 포함하는 테이블의 구체화된 뷰를 생성하고 테이블 이외에 구체화된 뷰를 마이그레이션합니다.
논리 대기를 생성하고, 테이블에 기본 키를 추가하고, 논리 대기에서 마이그레이션합니다.
오류: ORA -12899: 값이 열에 비해 너무 큽니다.column-name
오류 "ORA-12899: 값이 열에 비해 너무 큽니다.column-name
“는 종종 몇 가지 문제로 인해 발생합니다.
이러한 문제 중 하나는 소스 데이터베이스와 대상 데이터베이스에서 사용하는 문자 집합이 일치하지 않는 것입니다.
또 다른 문제는 두 데이터베이스 간에 자국어 지원 (NLS) 설정이 다르다는 것입니다. 이 오류의 일반적인 원인은 원본 데이터베이스 NLS LENGTH _ SEMANTICS 매개 변수가 로 CHAR 설정되고 대상 데이터베이스 NLS _ LENGTH _ SEMANTICS 매개 변수가 로 설정된 경우입니다BYTE.
NUMBER데이터 유형이 잘못 해석되고 있습니다.
Oracle NUMBER 데이터 유형은 정밀도와 규모에 따라 다양한 AWS DMS 데이터 유형으로 변환됩니다. NUMBER 이 변환은 Oracle용 소스 데이터 형식에 소개되어 있습니다. 소스 Oracle 엔드포인트의 엔드포인트 설정을 사용하면 NUMBER 유형이 변환되는 방식에도 영향을 미칠 수 있습니다. 이러한 엔드포인트 설정은 Oracle을 소스로 사용할 때의 엔드포인트 설정 AWS DMS에 설명되어 있습니다.
전체 로드 중 레코드 누락
전체 로드를 수행할 때는 데이터베이스 수준에서 열린 트랜잭션을 찾아 트랜잭션이 커밋될 때까지 기다립니다. AWS DMS 예를 들어, 작업 설정에 TransactionConsistencyTimeout=600
따라 테이블 매핑에 포함되지 않은 테이블에 열린 트랜잭션이 있더라도 10분간 AWS DMS 기다립니다. 그러나 열린 트랜잭션이 테이블 매핑에 포함된 테이블에 있고, 트랜잭션이 제시간에 커밋되지 않으면 대상 테이블 결과에서 레코드가 누락됩니다.
열린 트랜잭션을 커밋하는 데 시간이 오래 걸린다는 점을 알게 된 경우, TransactionConsistencyTimeout
태스크 설정을 수정하고 대기 시간을 늘릴 수 있습니다.
또한 FailOnTransactionConsistencyBreached
태스크 설정의 기본값은 false
입니다. 즉, 다른 트랜잭션은 AWS DMS 계속 적용되지만 열린 트랜잭션은 누락됩니다. 열린 트랜잭션이 제 시간에 종료되지 않은 경우 태스크가 실패하도록 설정하려면 FailOnTransactionConsistencyBreached
를 true
로 설정하면 됩니다.
테이블 오류
Table Error
절이 프라이머리 키 열을 참조하지 않고, 모든 열에 보충 로깅이 사용되지 않을 경우 복제 중에 테이블 통계에 WHERE
가 표시됩니다.
이 문제를 해결하려면 참조된 테이블의 모든 열에 대해 보충 로깅을 설정합니다. 자세한 내용은 보충 로깅 설정 단원을 참조하십시오.
오류: Cannot retrieve Oracle archived Redo log destination ids
이 오류는 Oracle 소스에 생성된 아카이브 로그가 없거나 V$ ARCHIVED LOG _가 비어 있는 경우 발생합니다. 로그를 수동으로 전환하여 오류를 해결할 수 있습니다.
Amazon RDS 데이터베이스의 경우 다음 절차를 실행하여 로그 파일을 전환합니다. switch_logfile
절차에는 파라미터가 없습니다.
exec rdsadmin.rdsadmin_util.switch_logfile;
자체 관리형 Oracle 소스 데이터베이스에서는 아래의 명령을 사용하여 로그 전환을 적용합니다.
ALTER SYSTEM SWITCH LOGFILE ;
Oracle 재실행 로그 또는 아카이브 로그의 읽기 성능 평가
Oracle 소스에서 성능 문제가 발생할 경우, Oracle 재실행 로그 또는 아카이브 로그의 읽기 성능을 평가하여 성능을 개선할 방법을 찾을 수 있습니다. 리두 또는 아카이브 로그 읽기 성능을 테스트하려면 AWS DMS 진단 Amazon 머신 이미지 (AMI) 를 사용하십시오.
AWS DMS 진단을 AMI 사용하여 다음을 수행할 수 있습니다.
-
이 bFile 방법을 사용하여 리두 로그 파일 성능을 평가하십시오.
-
LogMiner 방법을 사용하여 리두 로그 파일 성능을 평가하십시오.
-
PL/ SQL (
dbms_lob.read
) 메서드를 사용하여 리두 로그 파일 성능을 평가하십시오. -
에서 읽기 성능을 평가하려면 단일 스레드를 사용하십시오. ASMFile
-
에서 읽기 성능을 평가하려면 다중 스레드를 사용하십시오. ASMFile
-
Direct OS Readfile() Windows 또는 Pread64 Linux 함수를 사용하여 재실행 로그 파일을 평가합니다.
그런 다음, 결과에 따라 수정 단계를 진행할 수 있습니다.
Oracle 재실행 또는 아카이브 로그 파일의 읽기 성능을 테스트하려면
-
AWS DMS 진단 AMI Amazon EC2 인스턴스를 생성하고 여기에 연결합니다.
자세한 내용은 AWS DMS 진단 작업을 참조하십시오AMI.
-
awsreplperf 명령을 실행합니다.
$ awsreplperf
이 명령은 AWS DMS Oracle 읽기 성능 유틸리티 옵션을 표시합니다.
0. Quit 1. Read using Bfile 2. Read using LogMiner 3. Read file PL/SQL (dms_lob.read) 4. Read ASMFile Single Thread 5. Read ASMFile Multi Thread 6. Readfile() function
-
목록에서 옵션을 선택합니다.
-
아래의 데이터베이스 연결 및 아카이브 로그 정보를 입력합니다.
Oracle user name [system]: Oracle password: Oracle connection name [orcllx]: Connection format
hostname
:port
/instance
Oracle event trace? [N]: Default N = No or Y = Yes Path to redo or archive log file []: -
표시된 출력에서 관련 읽기 성능 정보를 확인합니다. 예를 들어, 다음은 옵션 번호 2, 읽기 사용을 선택한 결과 발생할 수 있는 출력을 보여줍니다 LogMiner.
-
유틸리티를 종료하려면 0을 입력합니다.
다음 단계
-
결과에 읽기 속도가 허용 가능한 임계값 미만인 것으로 표시될 경우, 엔드포인트에서 Oracle 진단 지원 스크립트를 실행하고 대기 시간, 로드 프로필, IO 프로필 섹션을 검토합니다. 그런 다음, 읽기 성능을 개선할 수 있는 비정상적인 구성을 조정합니다. 예를 들어 리두 로그 파일이 최대 2GB인 경우 성능을 BUFFER 향상시키려면 LOG _를 200MB로 늘려 보십시오.
-
AWS DMS 모범 사례를 검토하여 DMS 복제 인스턴스, 작업 및 엔드포인트가 최적으로 구성되었는지 확인하십시오.
My 관련 문제 해결 SQL
다음에서는 내 SQL 데이터베이스 AWS DMS 사용과 관련된 문제 해결에 대해 알아볼 수 있습니다.
주제
- CDC바이너리 로깅이 비활성화되어 Amazon RDS DB 인스턴스 엔드포인트에 대한 작업 실패
- 대상 SQL 인스턴스와의 연결이 작업 중에 끊깁니다.
- 내 호환 SQL 엔드포인트에 자동 커밋 추가
- 대상 My SQL 호환 엔드포인트에서 외래 키를 비활성화하십시오.
- 물음표로 대체된 문자
- 'Bad event' 로그 항목
- My 5.5로 데이터 캡처를 변경하십시오. SQL
- Amazon RDS DB 인스턴스의 바이너리 로그 보존 기간 증가
- 로그 메시지: 소스 데이터베이스의 일부 변경 사항은 대상 데이터베이스에 적용될 때 영향이 전혀 없었습니다.
- 오류: Identifier too long
- 오류: 지원되지 않는 문자 집합으로 인해 필드 데이터 변환 실패
- 오류: 코드페이지 1252에서 UTF8 [120112] 로의 필드 데이터 변환에 실패했습니다.
- 인덱스, 외부 키 또는 하위 항목 업데이트 또는 삭제가 마이그레이션되지 않음
CDC바이너리 로깅이 비활성화되어 Amazon RDS DB 인스턴스 엔드포인트에 대한 작업 실패
Amazon RDS DB 인스턴스에서 이 문제가 발생하는 이유는 자동 백업이 비활성화되었기 때문입니다. 백업 보존 기간을 0이 아닌 값으로 설정하여 자동 백업을 활성화합니다.
대상 SQL 인스턴스와의 연결이 작업 중에 끊깁니다.
내 SQL 대상과의 연결이 끊기는 작업이 LOBs 있는 경우 작업 로그에 다음과 같은 유형의 오류가 표시될 수 있습니다.
[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.
이 경우 일부 태스크 설정을 조정해야 할 수도 있습니다.
내 SQL 대상과의 작업 연결이 끊기는 문제를 해결하려면 다음과 같이 하세요.
데이터베이스 변수가 가장 LOB 큰 변수를 담을 수 있을 만큼 충분히 크게
max_allowed_packet
설정되어 있는지 확인하세요.다음 변수가 큰 시간 초과 값을 갖도록 설정했는지 확인합니다. 이 변수 각각에서 최소 5분 이상의 값을 사용할 것을 제안합니다.
net_read_timeout
net_write_timeout
wait_timeout
내 SQL 시스템 변수 설정에 대한 자세한 내용은 내 SQL 설명서의 서버 시스템 변수를
내 호환 SQL 엔드포인트에 자동 커밋 추가
대상 My 호환 엔드포인트에 자동 커밋을 추가하려면 SQL
-
v2/에서 AWS Management Console 로그인하고 AWS DMS 콘솔을 엽니다. https://console.aws.amazon.com/dms/
엔드포인트를 선택합니다.
자동 커밋을 추가하려는 내 SQL 호환 대상 엔드포인트를 선택합니다.
수정을 선택합니다.
고급을 선택하고 나서 추가 연결 속성 텍스트 상자에 다음 코드를 추가합니다.
Initstmt= SET AUTOCOMMIT=1
수정을 선택합니다.
대상 My SQL 호환 엔드포인트에서 외래 키를 비활성화하십시오.
대상 MySQL, Amazon Aurora My SQL 호환 에디션 또는 MariaDB 엔드포인트의 고급 섹션에 있는 추가 연결 속성에 다음을 SQL 추가하여 My에서 외래 키 검사를 비활성화할 수 있습니다.
대상 My 호환 엔드포인트에서 외래 키를 비활성화하려면 SQL
-
https://console.aws.amazon.com/dms/v2/에서 AWS Management Console
로그인하고 AWS DMS 콘솔을 엽니다. 엔드포인트를 선택합니다.
외래 키를 SQL 비활성화하려는 MySQL, Aurora My 또는 MariaDB 대상 엔드포인트를 선택합니다.
수정을 선택합니다.
고급을 선택하고 나서 추가 연결 속성 텍스트 상자에 다음 코드를 추가합니다.
Initstmt=SET FOREIGN_KEY_CHECKS=0
수정을 선택합니다.
물음표로 대체된 문자
이 문제가 발생하는 가장 일반적인 상황은 소스 엔드포인트 문자가 지원되지 않는 AWS DMS 문자 집합으로 인코딩된 경우입니다.
'Bad event' 로그 항목
마이그레이션 로그의 “잘못된 이벤트” 항목은 일반적으로 원본 데이터베이스 엔드포인트에서 지원되지 않는 데이터 정의 언어 (DDL) 작업이 시도되었음을 나타냅니다. 지원되지 않는 DDL 작업으로 인해 복제 인스턴스가 건너뛸 수 없는 이벤트가 발생하여 잘못된 이벤트가 기록됩니다.
이 문제를 해결하려면 태스크를 처음부터 다시 시작합니다. 이렇게 하면 테이블이 다시 로드되고 지원되지 않는 DDL 작업이 실행된 후 특정 시점에서 변경 내용 캡처가 시작됩니다.
My 5.5로 데이터 캡처를 변경하십시오. SQL
AWS DMS Amazon RDS My SQL 호환 데이터베이스의 변경 데이터 캡처 (CDC) 에는 전체 이미지 행 기반 바이너리 로깅이 필요하며, My SQL 버전 5.5 이하에서는 지원되지 않습니다. 사용하려면 AWS DMS CDC Amazon RDS DB 인스턴스를 My SQL 버전 5.6으로 업그레이드해야 합니다.
Amazon RDS DB 인스턴스의 바이너리 로그 보존 기간 증가
AWS DMS 변경 데이터 캡처를 위해 바이너리 로그 파일을 보존해야 합니다. Amazon RDS DB 인스턴스의 로그 보존을 늘리려면 다음 절차를 사용하십시오. 다음은 이진 로그 보존 기간을 24시간으로 연장하는 예제입니다.
call mysql.rds_set_configuration('binlog retention hours', 24);
로그 메시지: 소스 데이터베이스의 일부 변경 사항은 대상 데이터베이스에 적용될 때 영향이 전혀 없었습니다.
내 SQL 데이터베이스 열의 값을 기존 값으로 AWS DMS 업데이트하면 My에서 의 메시지가 zero rows affected
반환됩니다SQL. 이 동작은 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 생성하도록 설정하는 경우도 있습니다. 이러한 경우에는 DMS 현재 원본 데이터베이스에서 사용된 기본 키에 동일한 이름을 사용하지 않습니다. 대신 테이블 이름을 기반으로 기본 키 이름을 DMS 생성합니다. 테이블 이름이 길면 생성된 자동 생성 식별자가 My의 허용 한도보다 길 수 있습니다. SQL
이 문제를 해결하기 위한 현재의 접근 방식은 먼저 대상 데이터베이스에 테이블과 프라이머리 키를 미리 생성하는 것입니다. 그런 다음, 태스크 설정 대상 테이블 준비 모드가 아무 작업 안 함 또는 자르기로 설정된 태스크를 사용하여 대상 테이블을 채웁니다.
오류: 지원되지 않는 문자 집합으로 인해 필드 데이터 변환 실패
다음 오류는 지원되지 않는 문자 집합으로 인해 필드 데이터 변환이 실패할 때 발생합니다.
"[SOURCE_CAPTURE ]E: Column '
column-name
' uses an unsupported character set [120112] A field data conversion failed. (mysql_endpoint_capture.c:2154)
연결과 관련된 데이터베이스의 파라미터를 확인합니다. 다음 명령은 이 파라미터를 설정하는 데 사용할 수 있습니다.
SHOW VARIABLES LIKE '%char%';
오류: 코드페이지 1252에서 UTF8 [120112] 로의 필드 데이터 변환에 실패했습니다.
원본 내 데이터베이스에 코드페이지-1252자가 아닌 경우 마이그레이션 중에 다음 오류가 발생할 수 있습니다. SQL
[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)
해결 방법으로 소스 My SQL 엔드포인트와 함께 CharsetMapping
추가 연결 속성을 사용하여 문자 집합 매핑을 지정할 수 있습니다. 이 엔드포인트 설정을 추가하면 AWS DMS 마이그레이션 작업을 처음부터 다시 시작해야 할 수 있습니다.
예를 들어 소스 문자 집합이 Utf8
또는 인 내 SQL 소스 엔드포인트에 다음 엔드포인트 설정을 사용할 수 latin1
있습니다. 65001은 UTF8 코드 페이지 식별자입니다.
CharsetMapping=utf8,65001 CharsetMapping=latin1,65001
인덱스, 외부 키 또는 하위 항목 업데이트 또는 삭제가 마이그레이션되지 않음
AWS DMS 인덱스 및 외래 키와 같은 보조 개체의 마이그레이션은 지원하지 않습니다. 하위 항목 업데이트 또는 삭제 작업에서 하위 테이블의 변경 사항을 복제하려면 트리거하는 외부 키 제약 조건이 대상 테이블에서 활성화된 상태여야 합니다. 이러한 제한을 해결하려면 대상 테이블에서 외부 키를 수동으로 생성합니다. 그런 다음 다음 설명과 CDC 같이 전체 로드를 위한 단일 작업을 생성하거나 전체 로드를 위한 별도의 작업 두 개를 생성하십시오. CDC
전체 로드를 지원하는 단일 작업을 생성하고 CDC
이 절차에서는 전체 로드를 위해 단일 작업을 사용하여 외래 키와 인덱스를 마이그레이션하는 방법을 설명합니다. CDC
전체 로드 및 CDC 작업 생성
대상에서 외부 키와 인덱스가 있는 테이블을 수동으로 생성하여 소스 테이블과 일치하도록 합니다.
대상 ECA AWS DMS 엔드포인트에 다음을 추가합니다.
Initstmt=SET FOREIGN_KEY_CHECKS=0;
를 로
TargetTablePrepMode
설정하여 AWS DMS 작업을 생성합니다DO_NOTHING
.Stop task after full load completes
설정값을StopTaskCachedChangesApplied
로 설정합니다.작업을 시작합니다. AWS DMS 전체 로드가 완료되면 자동으로 작업을 중지하고 캐시된 변경 사항을 적용합니다.
이전에 추가한
SET FOREIGN_KEY_CHECKS
ECA 내용을 제거합니다.태스크를 재개합니다. 작업이 CDC 단계에 들어가서 원본 데이터베이스의 지속적인 변경 사항을 대상에 적용합니다.
전체 로드와 CDC 작업을 별도로 생성합니다.
이 절차에서는 전체 로드를 위해 별도의 작업을 사용하여 외래 키와 인덱스를 마이그레이션하는 방법을 설명합니다. CDC
전체 로드 태스크 생성
대상에서 외부 키와 인덱스가 있는 테이블을 수동으로 생성하여 소스 테이블과 일치하도록 합니다.
대상 ECA AWS DMS 엔드포인트에 다음을 추가합니다.
Initstmt=SET FOREIGN_KEY_CHECKS=0;
TargetTablePrepMode
파라미터를 로DO_NOTHING
설정하고EnableValidation
로 설정하여 AWS DMS 작업을 생성합니다FALSE
.작업을 시작합니다. AWS DMS 전체 로드가 완료되면 자동으로 작업을 중지하고 캐시된 변경 사항을 적용합니다.
작업이 완료되면 전체 로드 작업 시작 시간 (UTCIn) 또는 바이너리 로그 파일 이름과 위치를 적어두면 해당 CDC 작업만 시작할 수 있습니다. 로그를 참조하여 초기 전체 로드 시작 UTC 시간부터 타임스탬프를 가져오십시오.
CDC전용 작업 생성
이전에
SET FOREIGN_KEY_CHECKS
ECA 설정한 것을 제거하세요.시작 위치를 이전 단계에서 언급한 전체 로드 시작 시간으로 설정하여 CDC 전용 작업을 생성하십시오. 또는 이전 단계에서 기록된 바이너리 로그 위치를 사용할 수도 있습니다.
TargetTablePrepMode
설정값을DO_NOTHING
로 설정합니다. 필요한 경우EnableValidation
설정을TRUE
로 설정하여 데이터 검증을 활성화합니다.유일한 CDC 작업을 시작하고 로그에서 오류를 모니터링합니다.
참고
이 해결 방법은 My에서 My로 SQL SQL 마이그레이션하는 경우에만 적용됩니다. 일괄 적용 기능을 사용하려면 대상 테이블에 활성화된 외부 키가 없어야 하므로, 이 방법은 일괄 적용 기능과 함께 사용할 수 없습니다.
Postgre와 관련된 문제 해결 SQL
다음에서는 SQL Postgre 데이터베이스 AWS DMS 사용과 관련된 문제 해결에 대해 알아볼 수 있습니다.
주제
- JSON데이터 유형이 잘립니다.
- 사용자 정의 데이터 형식 열이 올바르게 마이그레이션되지 않음
- 오류: 생성하도록 선택된 스키마가 없음
- 를 사용하여 테이블에 대한 삭제 및 업데이트는 복제되지 않습니다. CDC
- 자르기 문이 전파되지 않고 있음
- Postgre가 캡처하지 못하도록 하기 SQL DDL
- 캡처할 데이터베이스 개체가 생성되는 스키마 선택 DDL
- Postgre로 마이그레이션한 후 Oracle 테이블이 누락되었습니다. SQL
- ReplicationSlotDiskUsage 워크로드와 같은 긴 트랜잭션 중에는 restart_lsn이 늘어나고 restart_lsn은 앞으로 이동하지 않습니다. ETL
- 소스로 보기를 사용한 작업에서 복사된 행이 없음
JSON데이터 유형이 잘립니다.
AWS DMS Postgre의 JSON 데이터 유형을 데이터 유형 열로 SQL 취급합니다. LOB 즉, 제한 LOB 모드를 사용할 때의 LOB 크기 제한이 데이터에 적용됩니다JSON.
예를 들어 제한 LOB 모드가 4,096KB로 설정되어 있다고 가정해 보겠습니다. 이 경우 4,096KB를 초과하는 모든 JSON 데이터는 4,096KB 한도에서 잘리고 Postgre에서의 검증 테스트에 실패합니다. SQL
다음 로그 정보는 제한 모드 설정 및 검증 실패로 인해 잘린 로그 정보를 보여줍니다JSON. LOB
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)
사용자 정의 데이터 형식 열이 올바르게 마이그레이션되지 않음
Postgre SQL 소스에서 복제하는 경우 사용자 정의 데이터 유형의 열을 제외하고 모든 열에 대해 동일한 데이터 유형을 사용하여 대상 테이블을 AWS DMS 생성합니다. 그러한 경우에 데이터 형식은 대상에서 ‘character varying’으로 생성됩니다.
오류: 생성하도록 선택된 스키마가 없음
경우에 따라 "SQL_ ERROR SqlState: 3F000 NativeError: 7 메시지:: 에서 생성할 스키마를 선택하지 않았습니다.ERROR” 라는 오류가 표시될 수 있습니다.
이 오류는 JSON 테이블 매핑에 스키마에 대한 와일드카드 값이 포함되어 있지만 원본 데이터베이스가 해당 값을 지원하지 않는 경우 발생할 수 있습니다.
를 사용하여 테이블에 대한 삭제 및 업데이트는 복제되지 않습니다. CDC
원본 테이블에 기본 키가 없는 경우 변경 데이터 캡처 (CDC) 중 삭제 및 업데이트 작업은 무시됩니다. AWS DMS 기본 키가 있는 Postgre SQL 테이블의 변경 데이터 캡처 (CDC) 를 지원합니다.
테이블에 기본 키가 없는 경우 write-ahead (WAL) 로그에는 데이터베이스 행의 이전 이미지가 포함되지 않습니다. 이 경우 테이블을 업데이트할 AWS DMS 수 없습니다. 복제할 작업을 삭제하려면 소스 테이블에서 프라이머리 키를 생성합니다.
자르기 문이 전파되지 않고 있음
변경 데이터 캡처 (CDC) 를 사용하는 경우 에서는 TRUNCATE 작업이 지원되지 않습니다 AWS DMS.
Postgre가 캡처하지 못하도록 하기 SQL DDL
다음 엔드포인트 DDL 설정문을 추가하여 Postgre SQL 대상 엔드포인트가 명령문을 캡처하지 못하게 할 수 있습니다.
"CaptureDDLs": "N"
캡처할 데이터베이스 개체가 생성되는 스키마 선택 DDL
캡처와 관련된 데이터베이스 개체가 DDL 생성되는 스키마를 제어할 수 있습니다. 아래의 엔드포인트 설정 문을 추가합니다. 엔드포인트 설정 파라미터는 소스 엔드포인트의 탭에서 제공됩니다.
"DdlArtifactsSchema: "xyzddlschema"
Postgre로 마이그레이션한 후 Oracle 테이블이 누락되었습니다. SQL
이 경우 일반적으로 테이블과 데이터에는 계속 액세스할 수 있습니다.
Oracle은 기본적으로 테이블 이름을 대문자로 사용하고 SQL Postgre는 기본적으로 테이블 이름을 소문자로 사용합니다. Oracle에서 Postgre로 마이그레이션할 때는 작업의 테이블 매핑 SQL 섹션에 특정 변환 규칙을 지정하는 것이 좋습니다. 이는 테이블 이름의 대소문자를 변환하는 변환 규칙입니다.
변환 규칙을 사용하지 않고 테이블을 마이그레이션하여 테이블 이름의 대소문자를 변환할 경우, 테이블 이름을 참조할 때 테이블 이름을 따옴표로 묶어야 합니다.
ReplicationSlotDiskUsage 워크로드와 같은 긴 트랜잭션 중에는 restart_lsn이 늘어나고 restart_lsn은 앞으로 이동하지 않습니다. ETL
논리적 복제가 활성화된 경우 트랜잭션당 메모리에 보관되는 최대 변경 사항 수는 4MB입니다. 그 후에는 변경 사항이 디스크로 유출됩니다. 따라서 트랜잭션이 완료/중지되고 롤백이 완료될 때까지 ReplicationSlotDiskUsage
가 증가하며 restart_lsn
이 진행되지 않습니다. 트랜잭션이 길기 때문에 롤백하는 데 시간이 오래 걸릴 수 있습니다.
따라서 논리적 복제가 활성화된 경우, 장기 실행 트랜잭션은 피하세요. 대신 트랜잭션을 여러 개의 작은 트랜잭션으로 나눕니다.
소스로 보기를 사용한 작업에서 복사된 행이 없음
보기를 마이그레이션하려면 table-type
을 all
또는 view
로 설정합니다. 자세한 내용은 콘솔에서 테이블 선택 및 변환 규칙 지정 단원을 참조하십시오.
보기를 지원하는 소스는 다음과 같습니다.
-
Oracle
-
마이크로소프트 SQL 서버
-
마이 SQL
-
포스트그레 SQL
-
IBMDb2 LUW
-
SAP어댑티브 서버 엔터프라이즈 () ASE
마이크로소프트 SQL 서버 관련 문제 해결
다음에서는 Microsoft SQL Server 데이터베이스 AWS DMS 사용과 관련된 문제 해결에 대해 알아볼 수 있습니다.
주제
서버가 보조 SQL 서버로 페일오버된 후 RDS 진행 중인 복제가 실패합니다.
원본 SQL 서버 인스턴스가 보조 인스턴스로 장애 조치되는 경우 AWS DMS 진행 중인 복제는 연결을 계속 시도하다가 원본이 다시 온라인 상태가 되면 복제를 계속합니다. 하지만 SQL 서버 MAZ 인스턴스의 경우 특정 상황에서 보조 데이터베이스 소유자를 다음으로 설정할 수 있습니다. RDS NT AUTHORITY\SYSTEM
장애 조치 후 이 경우 다음 오류가 발생하면서 DMS 작업이 실패합니다.
[SOURCE_CAPTURE ]E: RetCode: SQL_ERROR SqlState: 42000 NativeError: 33009 Message: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The database owner SID recorded in the master database differs from the database owner SID recorded in database 'rdsadmin'. You should correct this situation by resetting the owner of database 'rdsadmin' using the ALTER AUTHORIZATION statement. Line: 1 Column: -1 [1022502] (ar_odbc_stmt.c:5035)
이 문제를 해결하려면 db_owner를 데이터베이스의 rdsa 계정으로 변경의 단계를 수행한 다음 작업을 재개하십시오. DMS
서버 데이터베이스의 변경 내용을 캡처하는 중 오류가 발생했습니다. SQL
변경 데이터 캡처 (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)
에서 SQL 서버를 원본으로 사용하기 위해 나열된 사전 요구 사항을 검토하십시오. Microsoft SQL Server 데이터베이스를 원본으로 사용 AWS DMS
자격 증명 열 누락
AWS DMS 대상 스키마를 생성할 때 ID 열을 지원하지 않습니다. 초기 로드가 완료된 후 자격 증명 열을 추가해야 합니다.
오류: SQL 서버는 게시를 지원하지 않습니다.
SQLServer Express를 원본 엔드포인트로 사용하는 경우 다음 오류가 생성됩니다.
RetCode: SQL_ERROR SqlState: HY000 NativeError: 21106 Message: This edition of SQL Server does not support publications.
AWS DMS 현재는 SQL 서버 익스프레스를 소스 또는 타겟으로 지원하지 않습니다.
대상에 변경 사항이 표시되지 않음
AWS DMS 변경 내용을 일관되게 캡처하려면 원본 SQL 서버 데이터베이스가 'BULKLOGGED' 또는 '데이터 복구 모델에 속해야 합니다. FULL 'SIMPLE' 모델은 지원되지 않습니다.
SIMPLE복구 모델은 사용자가 데이터베이스를 복구할 수 있도록 필요한 최소한의 정보를 기록합니다. 체크포인트가 발생하면 모든 비활성 로그 항목은 자동으로 잘립니다.
모든 작업은 여전히 기록됩니다. 하지만 체크포인트가 발생하는 즉시 로그는 자동으로 잘립니다. 이렇게 잘리면 로그를 재사용할 수 있게 되고, 이전 로그 항목을 덮어쓸 수 있습니다. 로그 항목을 덮어쓰면 변경 사항을 캡처할 수 없습니다. 이 문제가 바로 SIMPLE 데이터 복구 모델을 지원하지 AWS DMS 않는 이유입니다. SQL서버를 원본으로 사용하기 위한 기타 필수 사전 요구 사항에 대한 자세한 내용은 을 참조하십시오. Microsoft SQL Server 데이터베이스를 원본으로 사용 AWS DMS
파티션 간에 매핑된 비균일 테이블
변경 데이터 캡처 (CDC) 중에 특수 구조를 가진 테이블의 마이그레이션이 테이블에서 제대로 CDC 수행되지 않으면 AWS DMS 해당 테이블의 마이그레이션이 일시 중단됩니다. 다음과 같은 메시지가 표시됩니다.
[SOURCE_CAPTURE ]W: Table is not uniformly mapped across partitions. Therefore - it is excluded from CDC (sqlserver_log_metadata.c:1415) [SOURCE_CAPTURE ]I: Table has been mapped and registered for CDC. (sqlserver_log_metadata.c:835)
SQL서버 테이블에서 CDC 실행하는 경우 서버 로그를 AWS DMS 구문 분석합니다. SQL 각 tlog 레코드에서 변경 중에 삽입, 업데이트 또는 삭제된 열의 데이터가 포함된 16진수 값을 AWS DMS 구문 분석합니다.
16진수 레코드를 파싱하려면 서버 시스템 테이블에서 테이블 메타데이터를 읽습니다. AWS DMS SQL 이러한 시스템 테이블은 특수 구조화된 테이블 열이 무엇인지 식별하고 “xoffset”및 “null bit position”과 같은 내부 속성 중 일부를 나타냅니다.
AWS DMS 테이블의 모든 원시 파티션에서 해당 메타데이터가 동일할 것으로 예상합니다. 하지만 특수하게 구성된 테이블의 모든 파티션의 경우에는 메타데이터가 동일하지 않을 때도 있습니다. 이러한 경우 변경 내용을 잘못 파싱하여 대상에 잘못된 데이터를 제공하는 것을 방지하기 위해 해당 테이블에서 일시 CDC 중단할 AWS DMS 수 있습니다. 해결 방법은 다음과 같습니다.
테이블에 클러스터링된 인덱스가 있는 경우 인덱스를 재구축합니다.
테이블에 클러스터링된 인덱스가 없으면 테이블에 클러스터링된 인덱스를 추가합니다(원하는 경우 나중에 삭제할 수 있음).
Amazon Redshift 관련 문제 해결
다음은 Amazon Redshift 데이터베이스 AWS DMS 사용과 관련된 문제 해결에 대해 알아볼 수 있습니다.
주제
다른 AWS 리전에서 Amazon Redshift 클러스터에 로드
AWS DMS 복제 인스턴스가 아닌 다른 AWS 지역의 Amazon Redshift 클러스터에는 로드할 수 없습니다. DMS복제 인스턴스와 Amazon Redshift 클러스터가 동일한 지역에 있어야 합니다.
오류: Relation "awsdms_apply_exceptions" already exists
Redshift 엔드포인트가 Postgre 엔드포인트로 지정된 경우 “'awsdms_apply_exception' 관계가 이미 존재합니다.” 라는 오류가 자주 발생합니다. SQL 이 문제를 해결하려면, 엔드포인트를 수정하고 [Target engine]을 "redshift"로 변경합니다.
awsdms_changes"로 시작하는 테이블 이름이 있는 오류
'awsdms_changes'로 시작하는 이름과 관련된 테이블 오류 메시지는 데이터를 동일한 Amazon Redshift 클러스터로 로드하려고 하는 태스크 2개를 동시에 실행할 때 발생합니다. 임시 테이블 이름을 지정하는 방식으로 인해 동일한 테이블을 업데이트할 때 동시 작업이 충돌할 수 있습니다.
이름이 dms.awsdms_changes000000000과 같은 클러스터에서 테이블 보기 XXXX
AWS DMS Amazon S3에 저장된 파일에서 데이터를 로드할 때 임시 테이블을 생성합니다. 이 임시 테이블의 이름에는 접두사 dms.awsdms_changes
가 있습니다. 데이터를 처음 로드할 때와 최종 대상 테이블에 배치하기 전에 데이터를 저장할 AWS DMS 수 있도록 이러한 테이블이 필요합니다.
Amazon Redshift 사용에 필요한 권한
Amazon AWS DMS Redshift와 함께 사용하려면 Amazon Redshift에 액세스하는 데 사용하는 사용자 계정에 다음과 같은 권한이 있어야 합니다.
CRUD(선택, 삽입, 업데이트, 삭제)
대량 로드
생성, 변경, 삭제(필요한 경우 태스크의 정의에 따라)
대상으로서 Amazon Redshift를 사용할 때 필요한 모든 사전 요구 사항을 보려면, AWS Database Migration Service의 대상으로 Amazon Redshift 데이터베이스 사용 섹션을 참조하세요.
Amazon Aurora My와 관련된 문제 해결 SQL
다음에서는 Amazon Aurora My SQL 데이터베이스 AWS DMS 사용과 관련된 문제 해결에 대해 알아볼 수 있습니다.
오류: ', '로 끝나는 CHARACTER SET UTF8 필드,' "'줄로 둘러싸인 필드,'\n'으로끝나는 필드
Amazon Aurora SQL My를 대상으로 사용하는 경우 로그에 다음과 같은 오류가 표시될 수 있습니다. 이러한 유형의 오류는 일반적으로 ANSI SQL _ MODE 파라미터의 QUOTES 일부로 _가 포함되어 있음을 나타냅니다. ANSISQL_ MODE 매개 변수의 QUOTES 일부로 _를 사용하면 큰따옴표가 따옴표처럼 처리되어 작업 실행 시 문제가 발생할 수 있습니다.
이 오류를 해결하려면 ANSI _ QUOTES 매개변수에서 _를 제거하세요. SQL MODE
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)
관련 문제 해결 SAP ASE
다음에서는 SAP ASE 데이터베이스 AWS DMS 사용과 관련된 문제 해결에 대해 알아볼 수 있습니다.
오류: 소스에 NULL 값이 있는 복합 고유 인덱스가 있는 경우 LOB 열에 NULL 값이 있습니다.
NULL값을 허용하는 복합 고유 인덱스로 구성된 테이블을 원본으로 사용하는 SAP ASE 경우 복제가 진행되는 동안 LOB 값이 마이그레이션되지 않을 수 있습니다. 이 동작은 일반적으로 DMS 복제 인스턴스 클라이언트에서 ANSI _가 기본적으로 1로 NULL 설정된 경우에 발생합니다.
LOB필드가 제대로 마이그레이션되도록 'AnsiNull=0'
하려면 작업의 AWS DMS 원본 엔드포인트에 엔드포인트 설정을 포함하세요.
IBMDb2 관련 문제 해결
다음에서는 IBM Db2 데이터베이스 AWS DMS 사용과 관련된 문제 해결에 대해 알아볼 수 있습니다.
오류: Resume from timestamp is not supported Task
지속적인 복제 (CDC) 의 경우 특정 타임스탬프에서 복제를 시작하려는 경우 연결 속성을 StartFromContext
필수 타임스탬프로 설정하십시오. 자세한 내용은 Db2 사용 시 엔드포인트 설정을 참조하십시오. LUW StartFromContext
를 필수 타임스탬프로 설정하면 아래와 같은 문제를 방지할 수 있습니다.
Last Error Resume from timestamp is not supported Task error notification received from subtask 0, thread 0 [reptask/replicationtask.c:2822] [1020455] 'Start from timestamp' was blocked to prevent Replicate from scanning the log (to find the timestamp). When using IBM DB2 for LUW, 'Start from timestamp' is only supported if an actual change was captured by this Replicate task earlier to the specified timestamp.