Wie kann ich eine AWS DMS-Aufgabe beheben, die aufgrund eines Fehlers bei der Verletzung einer Fremdschlüsselbeschränkung fehlgeschlagen ist?

Lesedauer: 3 Minute
0

Ich habe eine AWS Database Migration Service (AWS DMS)-Aufgabe, die aufgrund einer Verletzung der Fremdschlüsselbeschränkung fehlschlägt.

Kurzbeschreibung

Standardmäßig laden AWS DMS-Aufgaben während der Vollladephase acht Tabellen gleichzeitig. Diese Tabellen werden standardmäßig alphabetisch geladen, sofern Sie die Ladereihenfolge für die Aufgabe nicht konfigurieren. Weitere Informationen finden Sie unter Ladereihenfolge von Tabellen bei Volllast im AWS Database Migration Service. Der AWS Database Migration Service verbessert die Migrationsgeschwindigkeit, indem Unterstützung für parallele Volllast und neue LOB-Migrationsmechanismen hinzugefügt wird.

Wenn Sie die Ladereihenfolge nicht so konfigurieren, dass zuerst die übergeordneten Tabellen geladen werden, wird eine untergeordnete Tabelle möglicherweise vor der übergeordneten Tabelle geladen. Dies führt dazu, dass die Aufgabe mit einem Fehler bei der Verletzung von Fremdschlüsseleinschränkungen fehlschlägt. In diesem Fall werden Protokolleinträge angezeigt, die den folgenden Beispielen ähneln:

[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)

Bei der fortlaufenden Replikation wird der Modus Transactional Apply verwendet, der die Transaktionen in derselben Commit-Reihenfolge wie die Quelle anwendet. Wenn sich die Aufgabe in der laufenden Replikationsphase befindet, können Sie Fremdschlüsselbeschränkungen für das Ziel aktivieren. Wenn Sie Modus Stapel anwenden für die laufende Replikation verwenden, müssen Sie die Fremdschlüssel deaktivieren, auch während der Change Data Capture-Phase (CDC-Phase).

Auflösung

Führen Sie einen der folgenden Schritte aus, um diesen Fehler zu beheben:

  • Fremdschlüsseleinschränkungen deaktivieren
  • Verwenden Sie den Modus Tabellen im Ziel ablegen

Fremdschlüsseleinschränkungen deaktivieren

Wenn das Ziel eine MySQL-kompatible Datenbank ist, können Sie zusätzliche Verbindungsattribute verwenden, um Fremdschlüsseleinschränkungen zu deaktivieren:

initstmt=SET FOREIGN_KEY_CHECKS=0

Wenn das Ziel eine PostgreSQL-kompatible Datenbank ist, treten während der CDC-Phase Fehler bei der Verletzung von Fremdschlüsseln auf. Um diesen Fehler zu beheben, setzen Sie den Parameter session_replication_role auf replica. Fügen Sie dazu das zusätzliche Verbindungsattribut afterConnectScript=SET session_replication_role='replica' zum Endpunkt hinzu. Oder verwenden Sie die AWS-Befehlszeilenschnittstelle, um Endpunkteinstellungen zum Zielendpunkt hinzuzufügen.

Für andere Datenbank-Engines müssen Sie die Fremdschlüsseleinschränkungen manuell deaktivieren oder ablegen.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

Verwenden den Modus „Tabellen im Ziel ablegen“

Wenn Sie den Modus Tabellen im Ziel ablegen verwenden, erstellt AWS DMS nur Objekte, die für eine vollständige Ladung erforderlich sind, um das Ziel erfolgreich zu erreichen. AWS DMS bezeichnet dies auch als die Aufgabeneinstellung DROP_AND_CREATE. Wenn Sie jedoch den Modus Tabellen im Ziel ablegen verwenden, müssen Sie manuell andere Objekte außerhalb von AWS DMS erstellen. Dazu gehören Objekte wie sekundäre Indizes, Datenstandardwerte und Trigger.

Weitere Informationen

Verwenden des Aufgabenprotokolls zur Behebung von Migrationsproblemen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr