Binary Reader for Amazon Relational Database Service (Amazon RDS) for Oracle の使用中に AWS Database Migration Service (AWS DMS) タスクが失敗したのはなぜですか?
簡単な説明
変更データキャプチャ (CDC) フェーズ中に、Oracle は redo ログを読み取るために Oracle LogMiner と Binary Reader の 2 つの方法を提供しています。Oracle LogMiner は、オンラインおよびアーカイブされた redo ログにアクセスする SQL インターフェイスです。Binary Reader は、redo ログを直接読み込んで解析する AWS DMS の機能です。
変更の多い移行に Binary Reader を使用する場合、Oracle LogMiner を使用する場合と比較して、Oracle ソースへの影響は少なくなります。これは、アーカイブログがレプリケーションインスタンスでコピーされ、解析されるためです。大量の変更がある移行の場合、Binary Reader は通常 Oracle LogMiner を使用するよりも CDC のパフォーマンスが向上します。ネットワークパフォーマンスのボトルネックを避けるために、十分なネットワーク帯域幅をプロビジョニングしてください。
Binary Reader の使用時に前提条件が満たされていない場合、次の 2 種類のエラーが発生することがあります。
解決方法
アクセス許可エラー
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)」([TASK_MANAGER ]E: ORA-00604: 再帰 SQL レベル 1 でエラーが発生しました ORA-20900: ディレクトリに無効なパスが使用されました: awsdms_dir_test ORA-06512: 「RDSADMIN.RDSADMIN」、行 321 ORA-06512: 行 2 ; 無効な RDS Oracle バイナリリーダー db 設定、replacePathPrefix を TRUE に設定し、usePathPrefix を「/rdsdbdata/log/」に設定する必要があります; 無効な RDS Oracle バイナリリーダー db 設定、useAlternateFolderForOnline を TRUE に設定する必要があります; 無効な RDS Oracle バイナリリーダー db 設定、oraclePathPrefix を空にしないでください; 無効な RDS Oracle バイナリリーダー db 設定; ストリームコンポーネント「st_0_4MGMBIOJCILNOU3UHICCDBCNFQ」の準備中に失敗しました; サブタスクを初期化できません; ストリームコンポーネント「st_0_4MGMBIOJCILNOU3UHICCDBCNFQ」が終了しました [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 が管理する Oracle ソースで AWS DMS のために必要なユーザーアカウント権限
オンラインおよびアーカイブ REDO ログへのアクセス
Migrate an on-premises Oracle database to Amazon RDS for PostgreSQL using an Oracle bystander and AWS DMS (Oracle バイスタンダーと AWS DMS を使用して、オンプレミスの Oracle データベースを Amazon RDS for PostgreSQL に移行する)