Amazon RDS Oracle에 Binary Reader를 사용할 때 AWS DMS 작업이 실패한 이유는 무엇입니까?

최종 업데이트 날짜: 2019년 10월 2일

Amazon Relational Database Service(Amazon RDS) for Oracle에 Binary Reader를 사용할 때 AWS Database Migration Service(AWS DMS) 작업이 실패한 이유는 무엇입니까?

간략한 설명

변경 데이터 캡처(CDC) 단계에서 Oracle은 다시 실행 로그를 읽을 수 있는 두 가지 방법, 즉 Oracle LogMiner와 Binary Reader를 제공합니다. Oracle LogMiner는 온라인 및 아카이브된 다시 실행 로그에 액세스하는 SQL 인터페이스이며, Binary Reader는 다시 실행 로그를 직접 읽고 구문 분석하는 AWS DMS 기능입니다.

변경 사항이 많은 마이그레이션에 Binary Reader를 사용하는 경우, 아카이브 로그가 복사된 후 복제 인스턴스에서 구문 분석되기 때문에 Binary Reader는 Oracle LogMiner를 사용하는 것에 비해 Oracle 소스 데이터베이스에 미치는 영향이 적습니다. 변경 사항이 많은 마이그레이션의 경우 Binary Reader는 일반적으로 Oracle LogMiner를 사용하는 것보다 CDC 성능이 우수합니다. 네트워크 성능 병목 현상을 방지하려면 충분한 네트워크 대역폭을 프로비저닝해야 합니다.

Binary Reader를 사용할 때 사전 조건이 충족되지 않으면 두 가지 유형의 오류가 발생할 수 있습니다.

  • 권한 오류
  • 추가 연결 속성 오류

​해결 방법

권한 오류

AWS DMS는 소스 데이터베이스에 디렉터리를 생성하여 Binary Reader를 사용합니다. 따라서 AWS DMS 사용자 계정에 소스 Oracle 엔드포인트에 액세스하고 필요한 디렉터리를 생성하는 데 필요한 권한이 있어야 합니다. AWS DMS에 권한이 없는 경우 다음과 비슷한 로그 항목이 표시됩니다.

메시지
[SOURCE_CAPTURE] E: OCI error 'ORA-00604: error occurred at recursive SQL level 1 ORA-20900: Invalid path used for directory: /rdsdbdata/log/arch ORA-06512: at "RDSADMIN.RDSADMIN", line 321 ORA-06512: at line 2' [1022307] (oradcdc_bfilectx.c:164)

이러한 오류를 해결하려면 Amazon RDS 마스터 사용자를 AWS DMS 사용자로 사용해야 합니다. 디렉터리는 AWS DMS 작업이 실행되기 시작하면 자동으로 생성됩니다. 디렉터리가 생성되지 않은 경우 마스터 사용자를 사용하여 Oracle 데이터베이스에 로그인합니다. 그리고 다음 명령을 실행하여 이러한 디렉터리를 생성할 수 있는지 테스트합니다.

SQL> exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
SQL> exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;

[all_directories] 테이블을 쿼리하여 결과를 확인합니다.

SQL> select directory_path from all_directories where directory_name in ('ONLINELOG_DIR','ARCHIVELOG_DIR');
DIRECTORY_PATH
--------------------------------------------------------------------------------
/rdsdbdata/log/arch
/rdsdbdata/log/onlinelog

필요한 디렉터리 ONLINELOG_DIRARCHIVELOG_DIR을 생성한 후 AWS DMS 작업을 다시 시작합니다.

추가 연결 속성 오류

Binary Reader를 사용하지만 Oracle 원본에 필요한 추가 연결 속성이 누락된 경우 다음 로그 항목이 표시됩니다.

메시지
[TASK_MANAGER ]E: ORA-00604: error occurred at recursive SQL level 1 ORA-20900: Invalid path used for directory: awsdms_dir_test ORA-06512: at "RDSADMIN.RDSADMIN", line 321 ORA-06512: at line 2 ; Invalid RDS Oracle binary reader db settings, replacePathPrefix should be set to TRUE and usePathPrefix should be set to '/rdsdbdata/log/'; Invalid RDS Oracle binary reader db settings, useAlternateFolderForOnline should be set to TRUE; Invalid RDS Oracle binary reader db setting, oraclePathPrefix should not be empty; Invalid RDS Oracle binary reader db settings; Failed while preparing stream component 'st_0_4MGMBIOJCILNOU3UHICCDBCNFQ'.; Cannot initialize subtask; Stream component 'st_0_4MGMBIOJCILNOU3UHICCDBCNFQ' terminated [1020418] (replicationtask.c:2680)

Binary Reader를 사용하여 Amazon RDS Oracle 소스에 대한 변경 데이터를 캡처하려면 소스 엔드포인트에 다음 추가 연결 속성을 추가합니다.

useLogMinerReader=N;useBfile=Y;replacePathPrefix=true;usePathPrefix=/rdsdbdata/log/;useAlternateFolderForOnline=true;oraclePathPrefix=/rdsdbdata/db/ORCL_A/;accessAlternateDirectly=false