¿Cómo puedo solucionar una tarea de AWS DMS que ha fallado debido a un error de violación de una restricción de clave externa?

3 minutos de lectura
0

Tengo una tarea de AWS Database Migration Service (AWS DMS) que falla debido a una infracción de una restricción de clave externa.

Descripción breve

De forma predeterminada, las tareas de AWS DMS cargan ocho tablas a la vez durante la fase de carga completa. Estas tablas se cargan alfabéticamente de forma predeterminada, a menos que configure el orden de carga de la tarea. Para obtener más información, consulte Orden de carga de las tablas durante la carga completa en AWS Database Migration Service que mejora las velocidades de migración al añadir soporte para la carga completa en paralelo y los nuevos mecanismos de migración LOB.

Si no configura el orden de carga para que se carguen primero las tablas principales, es posible que una tabla secundaria se cargue antes que la tabla principal. Esto provoca que falle la tarea, de modo que se produce un error de infracción de la restricción de clave externa. En este caso, verá entradas de registro similares a las de los siguientes ejemplos:

[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: 0A000 NativeError: 1 Message: ERROR: cannot truncate a table referenced in a foreign key constraint; Error while executing the query [1022502] (ar_odbc_stmt.c:4622)

[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: HY000 NativeError: 1217 Message: [MySQL][ODBC 5.3(w) Driver][mysqld-5.7.23-log]Cannot delete or update a parent row: a foreign key constraint fails [1022502] (ar_odbc_stmt.c:4615)

La replicación continua utiliza el modo de Aplicación transaccional, que aplica las transacciones en el mismo orden de confirmación que la fuente. Cuando la tarea se encuentra en la fase de replicación en curso, puede activar las restricciones de clave externa en el destino. Si utiliza el modo de Aplicación por lotes para la replicación continua, debe desactivar las claves externas, incluso durante la fase de captura de datos de cambio (CDC).

Solución

Para resolver este error, complete cualquiera de los pasos siguientes:

  • Desactive las restricciones de clave externa
  • Use Eliminar tablas en el modo de destino

Desactive las restricciones de clave externa

Si el destino es una base de datos compatible con MySQL, puede utilizar atributos de conexión adicionales para desactivar las restricciones de clave externa:

initstmt=SET FOREIGN_KEY_CHECKS=0

Si el destino es una base de datos compatible con PostgreSQL, aparecen errores de infracción de clave externa durante la fase de CDC. Para resolver este error, ajuste el parámetro session\ _replication\ _role como réplica. Para ello, añada el atributo de conexión adicional afterConnectScript=SET session_replication_role='replica' al punto de conexión. O bien, utilice la interfaz de la línea de comandos de AWS para añadir la configuración del punto de conexión al punto de conexión de destino.

Para otros motores de bases de datos, desactive o elimine manualmente las restricciones de clave externa.

**Nota:**Si obtiene errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.

Use Eliminar tablas en el modo de destino

Cuando utiliza Eliminar tablas en el modo de destino, AWS DMS solo crea los objetos necesarios para que una carga completa tenga éxito en el destino. AWS DMS también lo denomina configuración de tareas DROP_AND_CREATE. Sin embargo, si utiliza Eliminar tablas en el modo de destino, deberá crear manualmente otros objetos fuera de AWS DMS. Esto incluye objetos como índices secundarios, valores predeterminados de datos y activadores.

Información relacionada

Uso del registro de tareas para solucionar problemas de migración

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año