為什麼在使用適用於 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_DIR 和 ARCHIVELOG_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