Como resolvo o problema de uma tarefa do AWS DMS que falhou com um erro de violação de restrição de chaves estrangeiras?

3 minuto de leitura
0

Tenho uma tarefa do AWS Database Migration Service (AWS DMS) que falha com uma violação de restrição de chave estrangeira.

Breve descrição

Por padrão, as tarefas do AWS DMS carregam oito tabelas por vez durante a fase de carga total. Essas tabelas são carregadas alfabeticamente por padrão, a menos que você configure a ordem de carregamento da tarefa. Para mais informações, veja Ordem de carregamento das tabelas durante o carregamento total em O AWS Database Migration Service melhora as velocidades de migração adicionando suporte para carga completa paralela e novos mecanismos de migração de LOB.

Se você não configurar a ordem de carregamento para carregar as tabelas principais primeiro, uma tabela secundária poderá ser carregada antes da tabela principal. Isso faz com que a tarefa falhe com um erro de violação de restrição de chave estrangeira. Nesse caso, você vê entradas de log semelhantes aos exemplos a seguir:

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

A replicação contínua usa o modo Transactional Apply (Aplicar transacional), que aplica as transações na mesma ordem de confirmação da origem. Quando a tarefa está na fase de replicação contínua, você pode ativar restrições de chave estrangeira no destino. Se você usar o modo Batch Apply (Aplicação em lote) para replicação contínua, deverá desativar as chaves estrangeiras, mesmo durante a fase de captura de dados de alteração (CDC).

Resolução

Para resolver esse erro, conclua uma das seguintes etapas:

  • Desativar restrições de chave estrangeira
  • Usar o modo Drop tables on target (Abandonar tabelas no destino)

Desativar restrições de chave estrangeira

Se o destino for um banco de dados compatível com MySQL, você poderá usar atributos de conexão extras para desativar as restrições de chave estrangeira:

initstmt=SET FOREIGN_KEY_CHECKS=0

Se o destino for um banco de dados compatível com PostgreSQL, você verá erros de violação de chave estrangeira durante a fase do CDC. Para resolver esse erro, defina o parâmetro session_replication_role como replica. Para fazer isso, adicione o atributo de conexão extra afterConnectScript=SET session_replication_role='replica' ao endpoint. Ou use a interface de linha de comando da AWS para adicionar configurações de endpoint ao endpoint de destino.

Para outros mecanismos de bancos de dados, desative ou elimine manualmente as restrições de chave estrangeira.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

Usar o modo Drop tables on target (Abandonar tabelas no destino)

Quando você usa o modo Drop tables on target (Descartar tabelas no destino), o AWS DMS cria somente os objetos necessários para que um carregamento completo seja bem-sucedido no destino. O AWS DMS também se refere a isso como a configuração da tarefa DROP_AND_CREATE. No entanto, se você usar tabelas o modo Drop tables on target (Descartar tabelas no destino), deverá criar manualmente outros objetos fora do AWS DMS. Isso inclui objetos como índices secundários, padrões de dados e gatilhos.

Informações relacionadas

Usar log de tarefas para solucionar problemas de migração

AWS OFICIAL
AWS OFICIALAtualizada há um ano