Amazon RDS for Oracle에 Binary Reader를 사용할 때 AWS DMS 작업이 실패한 이유는 무엇인가요?

최종 업데이트 날짜: 2022년 11월 25일

Amazon Relational Database Service(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를 사용하는 경우 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 rMeecursive 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 for Oracle 소스에 대한 변경 데이터를 캡처하려면 소스 엔드포인트에 다음 추가 연결 속성을 추가합니다.

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