Por que as condições do filtro de origem na minha tarefa do AWS DMS não funcionam mais?
Quero aprender a solucionar e corrigir problemas quando as condições do filtro de origem não estão funcionando corretamente em minhas tarefas do AWS Database Migration Service (AWS DMS).
Resolução
Verificar se o seu mecanismo oferece suporte ao recurso de filtragem de origem
A maioria das fontes do AWS DMS oferece suporte à filtragem de fontes. No entanto, o MongoDB ou o Amazon DocumentDB compatível com o MongoDB não oferecem suporte ao recurso de filtragem de origem. Para obter mais informações, consulte Sources for data migration.
As seguintes limitações podem afetar a filtragem de origem:
- Os filtros não calculam colunas de idiomas da direita para a esquerda.
- Você não pode aplicar filtros a colunas de objetos grandes (LOB).
- Você pode aplicar filtros somente às colunas fixas que não podem ser atualizadas depois de criá-las. Se você aplicar filtros de origem a colunas fixas que podem ser atualizadas após criá-las, esses filtros de origem talvez não funcionem.
Solucionar problemas de filtros que não funcionam durante a carga total
Determine em que fase a filtragem de origem não funciona.
Se a filtragem de origem não funcionar durante o carregamento total, execute as seguintes ações:
- Confirme se a diferenciação entre maiúsculas e minúsculas nas regras de mapeamento corresponde ao mecanismo de origem.
- Ao filtrar tipos de dados de data, use os formatos exigidos pelo AWS DMS.
- Execute o nível de registro de depuração em SOURCE_UNLOAD para reproduzir o problema. Em seguida, capture a consulta que o AWS DMS executa na origem para descarregar os dados.
Exemplo de um problema de filtragem em uma tabela Oracle de origem:
CREATE TABLE DMS.FILTERS ( ID NUMBER(10) NOT NULL, ENTRY_DATE DATE, CONSTRAINT FILTERS_PK PRIMARY KEY (ID) ); SQL> SELECT * FROM FILTERS; ID ENTRY_DATE ---------- --------- 1 01-JAN-22 2 01-JUN-22 3 01-JAN-21 4 01-JUN-21 5 01-JAN-20 6 01-JUN-20
Crie uma tarefa do AWS DMS com regras de mapeamento que você configura para replicar somente linhas que tenham ENTRY_DATE maior ou igual a 01/01/2022.
Exemplo de tarefa:
{ "rules": [ { "rule-type": "selection", "rule-id": "893662253", "rule-name": "893662253", "object-locator": { "schema-name": "DMS", "table-name": "FILTERS" }, "rule-action": "include", "filters": [ { "filter-type": "source", "column-name": "ENTRY_DATE", "filter-conditions": [ { "filter-operator": "gte", "value": "01/01/2022" } ] } ] } ] }
Para garantir que nenhum registro seja replicado e que os erros apareçam nos logs de tarefas, execute a seguinte consulta:
01786264: 2022-06-22T10:36:53 [SOURCE_UNLOAD ]E: ORA-01843: not a valid month [1020417] (oracle_endpoint_unload.c:171)
Como os logs de depuração estão ativados para SOURCE_UNLOAD, os logs de tarefas mostram a consulta exata que o AWS DMS executa no banco de dados de origem.
Consulta de exemplo:
1786264: 2022-06-22T10:36:53 [SOURCE_UNLOAD ]D: Select statement for UNLOAD is 'SELECT "ID","ENTRY_DATE" FROM "DMS"."FILTERS" WHERE ((("ENTRY_DATE" >= TO_DATE('0000-00-00','YYYY-MM-DD'))))' (oracle_endpoint_utils.c:1979)
Na saída de log a seguir, o AWS DMS executa a consulta no banco de dados de origem:
SELECT "ID","ENTRY_DATE" FROM "DMS"."FILTERS" WHERE ((("ENTRY_DATE" >= TO_DATE('0000-00-00','YYYY-MM-DD'))));
O AWS DMS não reconhece a data nas regras de mapeamento. Portanto, a data não corresponde ao formato de data esperado pelo AWS DMS.
Para modificar as regras de mapeamento para que correspondam ao formato de data esperado, execute a seguinte consulta:
{ "filter-operator": "gte", "value": "2022-01-01" }
Solucionar problemas de filtros que não funcionam durante a captura de dados de alterações (CDC)
Quando você filtra colunas fixas, os problemas de filtragem ocorrem somente durante a fase de CDC. Os problemas podem ocorrer somente em declarações específicas de linguagem de manipulação de dados (DML), como UPDATES ou DELETES. Certifique-se de ativar o registro em log suficiente na tabela de origem.
Para alocar registro em log adicional, use um Oracle, PostgreSQL ou Microsoft SQL Server.
Oracle
A Oracle usa registro em log complementar para adicionar logs adicionais nas colunas da tabela. Se a coluna que você filtrar não for uma coluna de chave primária, ative o registro em log complementar para as colunas da coluna e da chave primária.
O exemplo a seguir replica uma tabela chamada TEST.LOGGING que tem um ID de chave primária e um filtro na coluna NAME. Para criar o registro em log complementar do grupo de logs, execute o seguinte comando:
ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (ID, NAME) ALWAYS;
Se o registro em log complementar já tiver sido adicionado em todas as colunas da tabela, não adicione mais logs.
Exemplo com registro em log complementar já adicionado:
ALTER TABLE TableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
PostgreSQL
O PostgreSQL usa a propriedade REPLICA IDENTITY para configurar o nível de registro em log de uma tabela. Quando você define REPLICA IDENTITY como DEFAULT, o PostgreSQL registra os valores antigos das colunas da chave primária em logs de gravação antecipada (WAL). No entanto, quando você usa uma coluna de chave não primária, o nível de registro em log padrão pode não ser suficiente para exclusões.
Certifique-se de que a tarefa do AWS DMS use o plug-in definido com uma das seguintes propriedades:
Se você usar test_decoding, defina REPLICA IDENTITY como FULL:
ALTER TABLE tablename REPLICA IDENTITY FULL;
Observação: se você não definir REPLICA IDENTITY como FULL, o AWS DMS poderá enviar todas as exclusões para a tabela de destino.
Se você usar pglogical, defina REPLICA IDENTITY como ** FULL** depois de adicionar a tabela ao conjunto de replicação:
ALTER TABLE tablename REPLICA IDENTITY FULL;
Observação: quando você define REPLICA IDENTITY como FULL, pglogical inclui uma limitação para que você não possa adicionar uma tabela a um conjunto de replicação. Você também aumenta o número de registros WAL gerados no banco de dados de origem. Quando o número de logs do WAL aumenta, todas as colunas são conectadas ao WAL.
Microsoft SQL Server
Verifique se você atende a todos os seguintes requisitos de registro do CDC do AWS DMS para ativar o MS-CDC.
Para cada tabela que tenha uma chave primária, execute a seguinte consulta:
exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL, @supports_net_changes = 1 GO
Observação: a consulta anterior é necessária para fontes baseadas em nuvem.
Para cada tabela com chaves exclusivas, mas sem chave primária, execute a seguinte consulta:
exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @index_name = N'unique_index_name', @role_name = NULL, @supports_net_changes = 1 GO
Observação: a consulta anterior é necessária para fontes locais e baseadas na nuvem. Se você usa MS-Replication para fontes locais, não precisa executar a consulta anterior.
Para cada tabela que não tem chaves primárias ou exclusivas, execute a seguinte consulta:
exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL GO
Observação: a consulta anterior requer fontes on-premises e baseadas na nuvem.
MySQL
No MySQL, a variável de sistema binlog_row_image controla as imagens das linhas nos binlogs. Para obter mais informações, consulte binlog_row_image no site do MySQL. O AWS DMS exige que você defina binlog_row_image como FULL e binlog_format como ROW.
O MySQL registra todas as colunas na imagem anterior e na imagem posterior. Para confirmar o nível máximo de registro em log nos binlogs, você deve definir binlog_row_image como FULL no banco de dados de origem.
Informações relacionadas
Como usar filtros de origem em tarefas do AWS DMS?
Conteúdo relevante
- feita há 6 diaslg...
- Resposta aceitafeita há 4 diaslg...
- feita há 6 diaslg...
- feita há 20 diaslg...
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 2 anos