Oracle をソースとして使用している AWS DMS CDC タスクが「Sequence doesn't exist」(シーケンスが存在しません) というメッセージで失敗するのはなぜですか?

所要時間4分
0

AWS Database Migration Service (AWS DMS) を使用して、オンプレミスまたは Amazon Relational Database Service (Amazon RDS) for Oracle データベースからデータを移行したいと考えています。AWS DMS 変更データキャプチャ (CDC) タスクは想定どおりに実行されますが、次のようなエラーで失敗します: 「Oracle CDC maximum retry counter exceeded" (archivelog sequence does not exist)」(Oracle CDC の最大再試行カウンターを超えました」(アーカイブログシーケンスが存在しません)) このエラーをトラブルシューティングして解決するにはどうすればよいですか?

簡単な説明

Oracle データベースを移行タスクのソースとして使用すると、AWS DMS はフルロードフェーズ中にテーブルからデータを取得します。CDC フェーズ中、AWS DMS はアーカイブされた REDO ログから読み取ります。その後、AWS DMS はソース Oracle データベースから REDO ログをキャプチャし、コミットされた変更のみをターゲットデータベースに適用します。

次のようなシーケンスログエラーが表示される場合があります。

「03980512: 2022-05-23T12:33:11 [SOURCE_CAPTURE ]E: Archived Redo log with the sequence 232488 does not exist, thread 1 [1022318] (oradcdc_thread.c:624」(03980512: 2022-05-23T12:33:11 [SOURCE_CAPTURE ]E: シーケンス 232488 のアーカイブ REDO ログは存在しません。スレッド 1 [1022318] (oradcdc_thread.c:624)

このエラーをトラブルシューティングするには、次のステップに従います。

1.    このクエリをソース Oracle データベースで実行して、アーカイブログシーケンスがソースに存在するかどうかを確認します。例えば、次のクエリは、REDO ログシーケンス 232488 をチェックします。

select name, dest_id, thread#,
sequence#, archived, applied, deleted, status, first_time, next_time, 
completion_time  from v$archived_log where sequence# =232488;

2.    このコマンドは、ソースサーバー上のアーカイブログファイルの場所で実行します。このコマンドは、アーカイブログが物理的に存在するかどうかをチェックします。

ls -l * 232488*

3.    ソース Oracle データベースのアーカイブログの宛先 (log_archive_dest) を確認します。

この記事の例では、次の 2 つの異なる根本原因についてこのエラーを調査します。

  • AWS DMS が誤った DEST_ID で REDO ログを探している
  • [DEL] が [YES] で、アーカイブログシーケンスがソース Oracle に存在しない

解決方法

例 1 - AWS DMS が誤った DEST_ID で REDO ログを探している

このエラーは、アーカイブされた REDO ログシーケンス 232488 がソース Oracle DB で不足していることを示しています。これは、ログがソース Oracle データベースから削除された場合に発生する可能性があります。これにより、タスクは失敗します。

01788702: 2022-06-07T17:10:31:206453 [SOURCE_CAPTURE  ]D:  Going to 
prepare the statement 'select supplemental_log_data_min, DATABASE_ROLE, 
SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_ALL from v$database'  
(oracle_endpoint_conn.c:114)

01788702: 2022-06-07T17:10:31:209648 [SOURCE_CAPTURE  ]I:  Database role is 'PHYSICAL STANDBY'  (oracle_endpoint_conn.c:139)

1.    ソースデータベースで次のクエリを実行して、アーカイブログシーケンス 232488 がソースに存在するかどうかを確認します。

select name, dest_id, thread#, sequence#, archived, applied, deleted, 
status, first_time, next_time, completion_time  from v$archived_log 
where sequence# in (232488);

出力:

NAME                                             DEST_ID    THREAD#  SEQUENCE# ARC APPLIED   DEL S FIRST_TIM NEXT_TIME COMPLETIO

--------------------------------------------- ---------- ---------- ---------- --- --------- --- - --------- --------- ---------

/orafra/prdsvbo/arc/1_232488_950180179.arc             2          1     232488 YES YES       NO  A 07-JUN-22 07-JUN-22 07-JUN-22

2.    [DEL] 列を確認します。この列に [NO] と表示されている場合、アーカイブログシーケンスはソースデータベースに存在しています。[YES] と表示されている場合、アーカイブログは存在せず、保持期間が経過したためにソースから消去された可能性があります。

この例では、出力はアーカイブログシーケンスがソースに存在することを示しています。しかし、AWS DMS タスクは、シーケンスが存在しないというエラーで引き続き失敗します。[DEL] が [YES] の場合のトラブルシューティングについては、例 2 を参照してください。

3.    次に、[DEST_ID] 列を確認します。デフォルトでは、AWS DMS は [DEST_ID 1] の REDO ログをキャプチャします。この例では、ログに次のスニペットが表示されます。

01788702: 2022-06-07T17:10:31:658376 [SOURCE_CAPTURE  ]I:  Used Oracle archived Redo log destination id is '1'  (oracdc_merger.c:639)

01788702: 2022-06-07T17:10:31:658420 [SOURCE_CAPTURE  ]I:  Oracle instance uses more than one archived Redo log destination id. Please configure the correct destination id, if Redo logs of '1' destination cannot be accessed  (oracdc_merger.c:642)

そのため、AWS DMS タスクは [DEST_ID 1] の REDO ログを検索しているが、REDO ログファイルは [DEST_ID 2] に存在するため、失敗します。

4.    このエラーを緩和するには、ソースエンドポイントで次の追加の接続属性 (ECA) を使用します。

additionalArchivedLogDestId=2

additionalArchivedLogDestID の詳細については、「Oracle のソースデータ型」を参照してください。

5.    ECA を設定したら、AWS DMS タスクを再開します。この例では、AWS DMS が [DEST_ID 2] から使用可能な REDO ログシーケンス 232488 をキャプチャできるようになったことがログに示されています。

01898667: 2022-06-08T05:45:08:535588 [SOURCE_CAPTURE  ]D:  Going to retrieve archived REDO log with sequence 232488, thread 1  (oradcdc_thread.c:510)

01898667: 2022-06-08T05:45:08:535607 [SOURCE_CAPTURE  ]T:  Use a prepared statement to access v$archived_log, thread 1  (oradcdc_thread.c:587)

01898667: 2022-06-08T05:45:08:598396 [SOURCE_CAPTURE  ]D:  Going to open Redo Log with original name '/orafra/prdsvbo/arc/1_232488_950180179.arc', thread id '1'  (oradcdc_redo.c:492)

01898667: 2022-06-08T05:45:08:599614 [SOURCE_CAPTURE  ]D:  archived Redo log '/orafra/prdsvbo/arc/1_232488_950180179.arc' with sequence 232488 is opened, thread id '1'  (oradcdc_redo.c:747)

例 2 - [DEL] が [YES] で、アーカイブログシーケンスがソース Oracle に存在しない

ステップ 2 で既に詳述したように、[DEL] が [YES] の場合、アーカイブログシーケンスがソース Oracle データベースから消去された可能性があります。

: Oracle インスタンスは、アーカイブログが使用する容量を最小限に抑えるために、アーカイブログファイルを削除します。

オンプレミスまたは Amazon Elastic Compute Cloud (Amazon EC2) のステップ

SYSDATE-1 の時刻まで noprompt アーカイブログを削除するように Recovery Manager (RMAN) をスケジュールした場合、このスケジュールによって 1 日を超える期間が経過したすべてのアーカイブログファイルが削除されます。この期間を長くするには、このコマンドを SYSDATE-2 に変更するか、スケジュールをオフにします。

次のステップに従って現在の保持期間を確認し、それを長くします。

1.    RMAN に接続します。

2.    すべて表示します。

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

: デフォルトのアーカイブログ削除ポリシーの値は [NONE] です。

3.    削除ポリシーの値を、ソースのオンプレミスデータベースにアーカイブログを保持するのに十分な値に変更します。

CONFIGURE ARCHIVELOG DELETION POLICY BACKED UP integer TIMES TO DEVICE TYPE

  CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO SBT;

Amazon RDS のステップ

Amazon RDS は 5 分ごとにアーカイブログファイルを削除し、Amazon Simple Storage Solution (Amazon S3) バケットにコピーを保持します。このコピーを使用して、ポイントインタイムリストアを実行できます。    

1.    「Oracle DB インスタンスの一般的なログ関連タスクの実行」のステップを使用して、アーカイブログファイルの保持期間を長くします。    

2.    アーカイブログファイルのために定義されている保持期間を確認します。

exec RDSADMIN.RDSADMIN_UTIL.SHOW_CONFIGURATION;

3.    前のクエリで取得したアーカイブログファイルが、ソースデータベースサーバーで物理的に使用可能となっているかを確認します。

SQL>select name, archived, deleted, status, sequence# from v$archived_log where sequence# = 232488;

: Amazon RDS では、削除された列は、消去されていても [NO] を表示します。この情報はコントロールファイルから取得されます。

4.    Amazon RDS に REDO ログが存在するかどうかを確認するには、次のクエリを実行します。

select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('ARCHIVELOG_DIR')) where filename='redolog-5924417-1-1013939085.arc' order by mtime desc;

: AWS DMS は、アーカイブ REDO ログの消去を制御しません。アーカイブ REDO ログは、ソースオンプレミスまたは RDS for Oracle データベースによって消去されます。代わりに、AWS DMS は、次の LSN の処理を試みるときにログが見つからないことを確認します。

5.    使用可能な場合は、ソースの宛先でシーケンス 232488 の不足しているアーカイブログを復元し、タスクを再開します。AWS DMS タスクを正常に再開するには、232488 に続くすべての REDO ログがソースに存在している必要があります。

不足しているアーカイブログシーケンスを復元できない場合は、フルロードフェーズからタスクの再開を試みてから、移行をやり直してください。


関連情報

Extra connection attributes when using Oracle as a source for AWS DMS (AWS DMS のソースとして Oracle を使用する場合の追加の接続属性)

Using an Oracle database as a source for AWS DMS (AWS DMS のソースとして Oracle データベースを使用する)

Oracle DB インスタンスの一般的なログ関連タスクの実行

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ