외래 키 제약 조건 위반 오류로 인해 실패한 AWS DMS 작업의 문제를 해결하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2019년 10월 2일
외래 키 제약 조건 위반으로 인해 실패하는 AWS Database Migration Service(AWS DMS) 작업이 있습니다. 이 오류가 발생한 이유는 무엇이며 해결하려면 어떻게 해야 합니까?
간략한 설명
기본적으로 AWS DMS 작업은 전체 로드 중에 한 번에 테이블 8개를 로드합니다. 작업에 대한 로드 순서를 구성하지 않으면 테이블은 기본적으로 알파벳 순으로 로드됩니다. 자세한 내용은 AWS Database Migration Service는 병렬 전체 로드 및 새로운 LOB 마이그레이션 메커니즘에 대한 지원을 추가하여 마이그레이션 속도를 개선합니다의 전체 로드 중에 테이블 로드 순서 단원을 참조하십시오.
로드 순서가 상위 테이블을 먼저 로드하도록 구성되지 않은 경우 하위 테이블이 상위 테이블보다 먼저 로드될 수 있습니다. 이로 인해 작업이 실패하고 다음과 유사한 외래 키 제약 조건 위반 오류 및 로그 항목이 발생합니다.
메시지 |
---|
[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: 0A000 NativeError: 1 Message: ERROR: cannot truncate a table referenced in a foreign key constraint; Error while executing the query [1022502] (ar_odbc_stmt.c:4622) |
TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: HY000 NativeError: 1217 Message: [MySQL][ODBC 5.3(w) Driver][mysqld-5.7.23-log]Cannot delete or update a parent row: a foreign key constraint fails [1022502] (ar_odbc_stmt.c:4615) |
지속적 복제는 원본과 동일한 커밋 순서로 트랜잭션을 적용하는 [Transactional Apply] 모드를 사용합니다. 작업이 지속적 복제 단계에 있는 경우 대상에 대해 외래 키 제약 조건을 활성화할 수 있습니다. 지속적 복제에 [Batch Apply] 모드를 사용하는 경우 변경 데이터 캡처(CDC) 단계 중에도 외래 키를 비활성화해야 합니다.
해결 방법
이 오류를 해결하려면 다음 중 하나를 수행하십시오.
- 외래 키 제약 조건 비활성화
- [Drop tables on target] 모드 사용
외래 키 제약 조건 비활성화
대상이 MySQL 호환 데이터베이스인 경우 추가 연결 속성을 사용하여 외래 키 제약 조건을 비활성화할 수 있습니다.
initstmt=SET FOREIGN_KEY_CHECKS=0
대상이 PostgreSQL 호환 데이터베이스인 경우 CDC 단계 중에 외래 키 위반 오류를 볼 수 있습니다. 이 오류를 해결하려면 session_replication_role 파라미터를 복제본으로 설정합니다.
다른 데이터베이스 엔진의 경우 외래 키 제약 조건을 수동으로 비활성화하거나 "삭제"합니다.
[Drop tables on target] 모드 사용
[Drop tables on target] 모드([DROP_AND_CREATE] 작업 설정)를 사용하는 경우 AWS DMS는 대상에서 전체 로드에 성공하는 데 필요한 객체만 생성합니다. 하지만 [Drop tables on target] 모드를 사용하는 경우 보조 인덱스, 데이터 기본값 및 트리거와 같이 AWS DMS에서 생성되지 않은 다른 객체를 수동으로 생성해야 합니다.