Come posso risolvere un'attività AWS DMS non andata a buon fine a causa di un errore di violazione del vincolo di chiave esterna?

3 minuti di lettura
0

Ho un'attività di AWS Database Migration Service (AWS DMS) che fallisce a causa di una violazione del vincolo di chiave esterna.

Breve descrizione

Per impostazione predefinita, le attività AWS DMS caricano otto tabelle alla volta durante la fase di caricamento completo. Queste tabelle vengono caricate in ordine alfabetico per impostazione predefinita, a meno che non si configuri l'ordine di caricamento dell'attività. Per ulteriori informazioni, consulta L'ordine di caricamento delle tabelle a pieno carico in AWS Database Migration Service migliora la velocità di migrazione aggiungendo il supporto per il pieno carico parallelo e nuovi meccanismi di migrazione LOB.

Se non si configura l'ordine di caricamento per caricare prima le tabelle principali, è possibile che una tabella secondaria venga caricata prima della tabella principale. Ciò causa il fallimento dell'operazione con un errore di violazione del vincolo di chiave esterna. In questo caso, vengono visualizzate voci di registro simili ai seguenti esempi:

[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 replica in corso utilizza la modalità** Transactional Applyche applica le transazioni nello stesso ordine di commit dell'origine. Quando l'attività è nella fase di replica in corso, è possibile attivare vincoli di chiave esterna sull'obiettivo. Se si utilizza la modalità Batch Apply** per la replica in corso, è necessario disattivare le chiavi esterne, anche durante la fase di acquisizione dei dati di modifica (CDC).

Risoluzione

Per risolvere questo errore, effettua una delle seguenti operazioni:

  • Disattiva i vincoli della chiave esterna
  • Usa la modalità Drop tables on target

Disattiva i vincoli della chiave esterna

Se il target è un database compatibile con MySQL, puoi utilizzare attributi di connessione aggiuntivi per disattivare i vincoli della chiave esterna:

initstmt=SET FOREIGN_KEY_CHECKS=0

Se il target è un database compatibile con PostgreSQL, vengono visualizzati errori di violazione della chiave esterna durante la fase CDC. Per risolvere questo errore, imposta il parametro** session\ _replication\ _role** su** replica**. Per fare ciò, aggiungi l'attributo di connessione aggiuntivo** afterConnectScript=set session\ _replication\ _role='replica'** all'endpoint. In alternativa, utilizza l'interfaccia della linea di comando AWS per aggiungere le impostazioni degli endpoint all'endpoint di destinazione.

Per altri motori di database, disattiva o eliminamanualmente i vincoli di chiave esterna.

**Nota:**Se riscontri errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS, assicurati di utilizzare la versione più recente dell'interfaccia della linea di comando AWS.

Usa Drop tables in modalità target

Quando usi la modalità Drop tables on target, AWS DMS crea solo gli oggetti necessari per il corretto funzionamento del carico sull'obiettivo. AWS DMS fa riferimento anche a questa impostazione dell'attività DROP\ _AND\ _CREATE. Tuttavia, se utilizzi la modalità Drop tables on target, devi creare manualmente altri oggetti al di fuori di AWS DMS. Gli altri oggetti includono indici secondari, dati predefiniti e trigger.

Informazioni correlate

Utilizzo del log delle attività per risolvere i problemi di migrazione

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa