Comment résoudre une tâche AWS DMS qui a échoué en raison d'une erreur de violation de contrainte de clé étrangère ?

Lecture de 3 minute(s)
0

J'ai une tâche AWS Database Migration Service (AWS DMS) qui échoue en raison d'une violation de contrainte de clé étrangère.

Brève description

Par défaut, les tâches AWS DMS chargent huit tableaux à la fois pendant la phase de chargement complet. Ces tableaux se chargent par défaut par ordre alphabétique, sauf si vous configurez l'ordre de chargement de la tâche. Pour plus d'informations, voir Ordre de chargement des tableaux lors du chargement complet dans AWS Database Migration Service qui améliore les vitesses de migration en ajoutant la prise en charge du chargement complet en parallèle et de nouveaux mécanismes de migration LOB.

Si vous ne configurez pas l'ordre de chargement pour charger d'abord les tableaux parents, un tableau enfant risque alors de se charger avant son tableau parent. Cela entraîne l'échec de la tâche avec une erreur de violations de contrainte de clé étrangère. Dans ce cas, vous voyez des entrées de journal similaires aux exemples suivants :

[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 réplication en cours utilise le mode Application transactionnelle qui applique les transactions dans le même ordre de validation que la source. Lorsque la tâche est en phase de réplication en cours, vous pouvez activer des contraintes de clé étrangère sur la cible. Si vous utilisez le mode Application par lot pour une réplication continue, vous devez désactiver les clés étrangères, même pendant la phase de capture des données de modification (CDC).

Résolution

Pour résoudre cette erreur, effectuez l'une des étapes suivantes :

  • Désactivez les contraintes liées aux clés étrangères
  • Utilisez le mode Tableaux de dépôt sur cible

Désactivez les contraintes liées aux clés étrangères

Si la cible est une base de données compatible avec MySQL, vous pouvez utiliser des attributs de connexion supplémentaires pour désactiver les contraintes de clé étrangère :

initstmt=SET FOREIGN_KEY_CHECKS=0

Si la cible est une base de données compatible avec PostgreSQL, vous pouvez constater des erreurs de violation de clé étrangère pendant la phase CDC. Pour résoudre cette erreur, définissez le paramètre session_replication_role en tant que réplique. Pour ce faire, ajoutez l'attribut de connexion supplémentaire afterConnectScript=SET session_replication_role='replica' au point de terminaison. Vous pouvez également utiliser l'interface de ligne de commande AWS pour ajouter des paramètres de point de terminaison au point de terminaison cible.

Pour les autres moteurs de base de données, désactivez ou supprimez manuellement les contraintes de clé étrangère.

**Remarque :**Si vous recevez des erreurs lors de l'exécution des commandes de l'AWS CLI, assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

Utiliser le mode Tableaux de dépôt sur cible

Lorsque vous utilisez le mode Tableaux de dépôt sur cible, AWS DMS crée uniquement les objets nécessaires pour qu'un chargement complet aboutisse sur la cible. AWS DMS y fait également référence en tant que paramètre de tâche DROP_AND_CREATE. Toutefois, si vous utilisez le mode Tableaux de déôt sur cible, vous devez créer manuellement d'autres objets en dehors d'AWS DMS. Cela inclut des objets tels que des index secondaires, des données par défaut et des déclencheurs.

Informations connexes

Utilisation du journal des tâches pour résoudre les problèmes de migration

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an