為什麼在使用適用於 Amazon RDS for Oracle 的 Binary Reader 時,我的 AWS DMS 任務會失敗?

2 分的閱讀內容
0

為什麼在使用適用於 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 功能,可直接讀取和剖析重做日誌。

與使用 Oracle LogMiner 相比,使用 Binary Reader 進行大量變更的遷移對 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

相關資訊

AWS DMS 的 AWS 受管 Oracle 來源所需的使用者帳戶權限

存取線上和封存的重做日誌

使用 Oracle 待命項目和 AWS DMS 將內部部署 Oracle 資料庫遷移至 Amazon RDS for PostgreSQL

AWS 官方
AWS 官方已更新 2 年前