¿Por qué se produce un error en la tarea CDC de AWS DMS que utiliza Oracle como origen y aparece el mensaje “La secuencia no existe”?

Actualización más reciente: 8 de septiembre de 2022

Deseo migrar datos de la base de datos local o de Amazon Relational Database Service (Amazon RDS) para la base de datos de Oracle mediante AWS Database Migration Service (AWS DMS). La tarea de captura de datos de cambio (CDC) de AWS DMS se ejecuta según lo previsto, pero luego se produce un error similar a este:

“Se ha superado el contador máximo de reintentos de CDC de Oracle” (la secuencia de registro de archivo no existe)”

¿Cómo se puede solucionar este error?

Descripción breve

Cuando se utiliza una base de datos Oracle como origen para la tarea de migración, AWS DMS obtiene los datos de la tabla durante la fase de carga completa. Durante la fase de CDC, AWS DMS lee de los registros de rehacer archivados. Posteriormente, AWS DMS captura los registros de rehacer de la base de datos de Oracle de origen y aplica únicamente los cambios confirmados a la base de datos de destino.

Es posible que aparezca un error en el registro de la secuencia con el siguiente aspecto:

“03980512: 2022-05-23T12:33:11 [SOURCE_CAPTURE ]E: El registro de rehacer archivado con la secuencia 232488 no existe, subproceso 1 [1022318] (oradcdc_thread.c:624”

Para solucionar este error, siga los siguientes pasos:

1.    Ejecute esta consulta en la base de datos Oracle de origen para verificar si la secuencia de registro de archivo está presente en el origen. Por ejemplo, esta consulta busca la secuencia de registro de rehacer 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.    Ejecute este comando en la ubicación de los archivos de registro de archivo en el servidor de origen. Este comando verifica si el registro de archivo se encuentra físicamente presente:

ls -l * 232488*

3.    Compruebe el destino del registro de archivo (log_archive_dest) en la base de datos de Oracle de origen.

Los ejemplos de este artículo investigan este error con dos causas raíz diferentes:

  • AWS DMS busca el registro de rehacer en el DEST_ID equivocado
  • DEL es YES y la secuencia de registro de archivo no existe en Oracle de origen

Resolución

Ejemplo 1: AWS DMS busca el registro de rehacer en el DEST_ID equivocado

El error muestra que falta la secuencia de registro de rehacer archivado 232488 en la base de datos de Oracle de origen. Esto puede ocurrir si el registro se elimina de la base de datos de Oracle de origen. Esto provoca que se produzca un error en la tarea.

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.    Ejecute esta consulta en la base de datos de origen para ver si la secuencia de registro de archivo 232488 existe en el origen:

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

Salida:

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.    Verifique la columna DEL. Si en esta columna aparece NO, significa que la secuencia de registro de archivado existe en la base de datos de origen. Si aparece YES, significa que el registro de archivado no existe, y que podría haber sido purgado del origen debido al periodo de retención.

En este ejemplo, la salida indica que la secuencia de registro de archivo existe en el origen. Sin embargo, aún se produce un error en la tarea de AWS DMS que indica que la secuencia no existe. Para solucionar los problemas cuando DEL es SÍ, consulte el ejemplo 2.

3.    A continuación, verifique la columna DEST_ID. De forma predeterminada, AWS DMS captura los registros de rehacer en DEST_ID 1. En este ejemplo, se ve este fragmento en los registros:

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)

Por lo tanto, se produce un error en la tarea AWS DMS porque esta busca el registro de rehacer en DEST_ID 1, mientras que el archivo de registro de rehacer se encuentra en DEST_ID 2.

4.    Para mitigar este error, utilice este atributo de conexión extra (ECA) en el punto de conexión de origen:

additionalArchivedLogDestId=2

Para obtener más información acerca de additionalArchivedLogDestID, consulte Tipos de datos de origen para Oracle.

5.    Después de configurar ECA, reanude la tarea de AWS DMS. En este ejemplo, los registros indican que AWS DMS ahora puede capturar la secuencia de registro de rehacer disponible 232488 de DEST_ID 2.

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)

Ejemplo 2 - DEL es YES y la secuencia de registro de archivos no existe en Oracle de origen

Como se indicó previamente en el paso 2, si DEL es YES, es posible que la secuencia de registro de archivo se haya purgado de la base de datos de Oracle de origen.

Nota: Las instancias de Oracle eliminan los archivos de registro de archivo para minimizar el espacio que ocupan los registros de archivo.

Pasos para entornos locales o Amazon Elastic Compute Cloud (Amazon EC2)

Si se programó que Recovery Manager (RMAN) borrara el archivo de registro noprompt hasta la hora SYSDATE-1, esta programación elimina todos los archivos de registro de archivo con una antigüedad superior a un día. Para aumentar este periodo, modifique este comando a SYSDATE-2 o desactive la programación.

Siga los siguientes pasos para encontrar el periodo de retención actual y, a continuación, aumentarlo.

1.    Conéctese a RMAN.

2.    Mostrar todo:

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

Nota: El valor predeterminado de la política de borrado del registro de archivo es NONE.

3.    Cambie el valor de la política de eliminación a un valor que sea suficiente para retener los registros de archivo en la base de datos local de origen:

CONFIGURE ARCHIVELOG DELETION POLICY BACKED UP integer TIMES TO DEVICE TYPE

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

Pasos para Amazon RDS

Amazon RDS elimina los archivos de registro de archivo cada cinco minutos y mantiene una copia en un bucket de Amazon Simple Storage Solution (Amazon S3). Puede utilizar esta copia para hacer una restauración a un momento dado.    

1.    Aumente la retención de los archivos de registro de archivo. Para ello, siga los pasos que se indican en Realizar tareas comunes relacionadas con los registros para las instancias de bases de datos de Oracle.    

2.    Verifique el periodo de retención que se ha definido para los archivos de registro de archivo:

exec RDSADMIN.RDSADMIN_UTIL.SHOW_CONFIGURATION;

3.    Verifique si el archivo de registro de archivo que obtuvo en la consulta anterior se encuentra físicamente disponible en el servidor de la base de datos de origen.

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

Nota: En Amazon RDS, la columna eliminada muestra NO, aunque haya sido purgada. Esta información proviene del archivo de control.

4.    Para verificar si el registro de rehacer existe en Amazon RDS, ejecute esta consulta:

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

Nota: AWS DMS no controla la purga de los registros de rehacer de archivo. Los registros de rehacer de archivo son purgados por la base de datos local o RDS para Oracle de origen. En cambio, AWS DMS confirma que no puede encontrar el registro cuando intenta procesar el siguiente número de secuencia de registro.

5.    Si está disponible, restaure el registro de archivo que falta de la secuencia 232488 en el destino del origen y, después, reanude la tarea. Todos los registros de rehacer siguientes al 232488 deben estar presentes en el origen antes de que pueda reanudar correctamente la tarea de AWS DMS.

Si no puede restaurar la secuencia de registro de archivo que falta, intente reiniciar la tarea desde la fase de carga completa y, después, vuelva a iniciar la migración.