Validação de dados do AWS DMS - AWS Database Migration Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Validação de dados do AWS DMS

O AWS DMS é compatível com a validação de dados para garantir que os dados sejam migrados com precisão da origem para o destino. Se ativada, a validação começa imediatamente após a execução da carga máxima de uma tabela. A validação compara as alterações incrementais de uma tarefa ativada para a CDC à medida que ocorrem.

Durante a validação de dados, o AWS DMS compara cada linha na origem com a linha correspondente no destino e verifica se essas linhas contêm quaisquer incompatibilidades. Para fazer isso, o AWS DMS emite consultas apropriadas para recuperar os dados. Observe que essas consultas consomem recursos adicionais na origem e no destino, bem como em outros recursos de rede.

Para uma tarefa exclusiva de apenas CDC com a validação ativada, todos os dados preexistentes em uma tabela são validados antes de iniciar a validação de novos dados.

A validação de dados funciona com os seguintes bancos de dados de origem sempre que o AWS DMS for compatível com eles como endpoints de origem:

  • Oracle

  • Banco de dados compatível com o PostgreSQL (PostgreSQL, Aurora PostgreSQL ou Aurora Sem Servidor para PostgreSQL)

  • Banco de dados compatível com o MySQL (MySQL, MariaDB, Aurora MySQL ou Aurora Sem Servidor para MySQL)

  • Microsoft SQL Server

  • IBM Db2 LUW

A validação de dados funciona com os seguintes bancos de dados de destino sempre que o AWS DMS for compatível com eles como endpoints de destino:

  • Oracle

  • Banco de dados compatível com o PostgreSQL (PostgreSQL, Aurora PostgreSQL ou Aurora Sem Servidor para PostgreSQL)

  • Banco de dados compatível com o MySQL (MySQL, MariaDB, Aurora MySQL ou Aurora Sem Servidor para MySQL)

  • Microsoft SQL Server

  • IBM Db2 LUW

  • Amazon Redshift

  • Amazon S3. Para obter informações sobre como validar os dados de destino do Amazon S3, consulte Validação de dados de destino do Amazon S3.

Para obter mais informações sobre os endpoints com suporte, consulte Como trabalhar com endpoints do AWS DMS.

A validação de dados requer tempo adicional, além da quantidade necessária para a migração em si. O tempo extra necessário depende do volume de dados que foi migrado.

Para ter mais informações sobre essas configurações, consulte Configurações da tarefa de validação de dados.

Para obter um exemplo das configurações da tarefa ValidationSettings em um arquivo JSON, consulte Exemplo de configurações de tarefas.

Estatísticas da tarefa de replicação

Quando a validação de dados é ativada, o AWS DMS passa as seguintes estatísticas no nível da tabela:

  • ValidationState: o estado de validação da tabela. O parâmetro pode ter os valores a seguir:

    • Não ativado: a validação não é ativada para a tabela na tarefa de migração.

    • Registros pendentes: alguns registros na tabela estão aguardando validação.

    • Registros incompatíveis: alguns registros na tabela não correspondem entre a origem e o destino. Uma incompatibilidade pode ocorrer por vários motivos. Para obter mais informações, consulte a tabela awsdms_control.awsdms_validation_failures_v1 no endpoint de destino.

    • Registros suspensos: não foi possível validar alguns registros na tabela.

    • Nenhuma chave primária: não foi possível validar a tabela, pois ela não tinha uma chave primária.

    • Erro de tabela: não foi possível validar a tabela, porque ela estava em estado de erro, e alguns dados não foram migrados.

    • Validadas: todas as linhas na tabela estão validadas. Se a tabela for atualizada, o status poderá não ser mais Validado.

    • Erro: não é possível validar a tabela devido a um erro inesperado.

    • Validação pendente: a tabela está aguardando validação.

    • Preparando a tabela: preparando a tabela ativada na tarefa de migração para validação.

    • Revalidação pendente: todas as linhas na tabela estão pendentes de validação após a atualização da tabela.

  • ValidationPending: o número de registros migrados que foram para o destino, mas que ainda não foram validados.

  • ValidationSuspended: o número de registros que o AWS DMS não pode comparar. Por exemplo, se um registro na origem for atualizado constantemente, o AWS DMS não conseguirá comparar a origem e o destino.

  • ValidationFailed: o número de registros que não foram aprovados na fase de validação de dados.

Para obter um exemplo das configurações da tarefa ValidationSettings em um arquivo JSON, consulte Exemplo de configurações de tarefas.

É possível visualizar as informações de validação de dados utilizando o console, a AWS CLI ou a API do AWS DMS.

  • No console, é possível optar por validar uma tarefa ao criá-la ou modificá-la. Para visualizar o relatório de validação de dados utilizando o console, escolha a página Tarefas e escolha a guia Estatísticas da tabela, na seção de detalhes.

  • Utilizando a CLI, defina o parâmetro EnableValidation como true ao criar ou modificar uma tarefa para começar a validação de dados. O exemplo a seguir cria uma tarefa e permite a validação de dados.

    create-replication-task --replication-task-settings '{"ValidationSettings":{"EnableValidation":true}}' --replication-instance-arn arn:aws:dms:us-east-1:5731014: rep:36KWVMB7Q --source-endpoint-arn arn:aws:dms:us-east-1:5731014: endpoint:CSZAEFQURFYMM --target-endpoint-arn arn:aws:dms:us-east-1:5731014: endpoint:CGPP7MF6WT4JQ --migration-type full-load-and-cdc --table-mappings '{"rules": [{"rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": {"schema-name": "data_types", "table-name": "%"}, "rule-action": "include"}]}'

    Use o comando describe-table-statistics para receber o relatório de validação de dados no formato JSON. O comando a seguir mostra o relatório de validação de dados.

    aws dms describe-table-statistics --replication-task-arn arn:aws:dms:us-east-1:5731014: rep:36KWVMB7Q

    O relatório seria semelhante ao seguinte.

    { "ReplicationTaskArn": "arn:aws:dms:us-west-2:5731014:task:VFPFTYKK2RYSI", "TableStatistics": [ { "ValidationPendingRecords": 2, "Inserts": 25, "ValidationState": "Pending records", "ValidationSuspendedRecords": 0, "LastUpdateTime": 1510181065.349, "FullLoadErrorRows": 0, "FullLoadCondtnlChkFailedRows": 0, "Ddls": 0, "TableName": "t_binary", "ValidationFailedRecords": 0, "Updates": 0, "FullLoadRows": 10, "TableState": "Table completed", "SchemaName": "d_types_s_sqlserver", "Deletes": 0 } }
  • Utilizando a API do AWS DMS, crie uma tarefa que utiliza a ação CreateReplicationTask e defina o parâmetro EnableValidation como verdadeiro para validar os dados migrados pela tarefa. Use a ação DescribeTableStatistics para receber o relatório de validação de dados no formato JSON.

Estatísticas de tarefas de replicação com o Amazon CloudWatch

Quando o Amazon CloudWatch está ativado, o AWS DMS fornece as seguintes estatísticas de tarefas de replicação:

  • ValidationSucceededRecordCount: número de linhas validadas pelo AWS DMS por minuto.

  • ValidationAttemptedRecordCount: número de linhas com tentativa de validação por minuto.

  • ValidationFailedOverallCount: número de linhas onde a validação falhou.

  • ValidationSuspendedOverallCount: número de linhas onde a validação foi suspensa.

  • ValidationPendingOverallCount: número de linhas onde a validação ainda está pendente.

  • ValidationBulkQuerySourceLatency: o AWS DMS pode executar a validação de dados em massa, especialmente em certos cenários durante uma replicação de carga máxima ou contínua quando houver muitas alterações. Essa métrica indica a latência necessária para ler um conjunto de dados em massa no endpoint de origem.

  • ValidationBulkQueryTargetLatency: o AWS DMS pode realizar a validação de dados em massa, especialmente em certos cenários durante uma replicação de carga máxima ou contínua quando houver muitas alterações. Essa métrica indica a latência necessária para ler um conjunto de dados em massa no endpoint de destino.

  • ValidationItemQuerySourceLatency: durante a replicação contínua, a validação de dados pode identificar alterações contínuas e validar essas alterações. Essa métrica indica a latência de leitura das alterações a partir da origem. A validação pode executar mais consultas do que o necessário, com base no número de alterações, se houver erros durante a validação.

  • ValidationItemQueryTargetLatency: durante a replicação contínua, a validação de dados pode identificar alterações contínuas e validar as alterações linha por linha. Essa métrica fornece a latência de leitura das alterações a partir do destino. A validação pode executar mais consultas do que o necessário, com base no número de alterações, se houver erros durante a validação.

Para coletar informações sobre a validação de dados nas estatísticas ativadas pelo CloudWatch, selecione Ativar logs do CloudWatch ao criar ou modificar uma tarefa utilizando o console. Para visualizar as informações sobre a validação de dados e garantir que os dados foram migrados de forma precisa da origem para o destino, faça o seguinte.

  1. Escolha a tarefa pai na lista na página Tarefas de migração de banco de dados.

  2. Escolha a guia Métricas do CloudWatch.

  3. Selecione Validação no menu suspenso.

Revalidar tabelas durante uma tarefa

Enquanto uma tarefa estiver em execução, é possível solicitar que o AWS DMS execute a validação de dados.

AWS Management Console

  1. Faça login no AWS Management Console e abra o console do AWS DMS em https://console.aws.amazon.com/dms/v2/.

    Se estiver conectado como usuário do AWS Identity and Access Management (IAM), verifique se você tem as permissões necessárias para acessar o AWS DMS. Para obter as permissões necessárias, consulte Permissões do IAM necessárias para utilizar o AWS DMS.

  2. No painel de navegação, selecione Tasks.

  3. Escolha a tarefa em execução cuja tabela você deseja revalidar.

  4. Escolha a guia Table Statistics (Estatísticas da tabela).

  5. Escolha a tabela que deseja revalidar (é possível escolher até 10 tabelas por vez). Se a tarefa não estiver mais em execução, não será possível revalidar a(s) tabela(s).

  6. Selecione Revalidate (Revalidar).

Utilizar o editor JSON para modificar regras de validação

Para adicionar uma regra de validação a uma tarefa utilizando o editor JSON no console do AWS DMS, faça o seguinte:

  1. Selecione Tarefas de migração de banco de dados.

  2. Selecione a tarefa na lista de tarefas de migração.

  3. Se a tarefa estiver em execução, selecione Interromper no menu suspenso Ações.

  4. Depois que a tarefa for interrompida, para modificá-la, selecione Modificar no menu suspenso Ações.

  5. Na seção Mapeamentos de tabela, selecione o editor JSON e adicione sua regra de validação aos mapeamentos de tabela.

Por exemplo, é possível adicionar a regra de validação a seguir para executar um perfil de substituição na origem. Nesse caso, se a regra de validação encontrar um byte nulo, ela o validará como um espaço.

{ "rule-type": "validation", "rule-id": "1", "rule-name": "1", "rule-target": "column", "object-locator": { "schema-name": "Test-Schema", "table-name": "Test-Table", "column-name": "Test-Column" }, "rule-action": "override-validation-function", "source-function": "REPLACE(${column-name}, chr(0), chr(32))", "target-function": "${column-name}" }

Tarefas somente de validação

É possível criar tarefas somente de validação para visualizar e validar os dados sem executar nenhuma migração ou replicação de dados. Para criar uma tarefa somente de validação, defina as configurações EnableValidation e ValidationOnly como true. Ao ativar ValidationOnly, requisitos adicionais se aplicam. Para obter mais informações, consulte Configurações da tarefa de validação de dados.

Para um tipo de migração de carga máxima somente, uma tarefa somente de validação é concluída muito mais rapidamente do que a CDC equivalente quando muitas falhas são relatadas. Mas as alterações no endpoint de origem ou de destino são relatadas como falhas no modo de carga máxima, uma possível desvantagem.

Uma tarefa somente de validação da CDC atrasa a validação com base na latência média e repete as falhas várias vezes antes de relatá-las. Se a maioria das comparações de dados resultar em falhas, uma tarefa somente de validação do modo CDC será muito lenta, uma desvantagem potencial.

Uma tarefa somente de validação deve ser configurada na mesma direção da tarefa de replicação, especialmente para a CDC. Isso ocorre porque uma tarefa somente de validação de CDC detecta quais linhas foram alteradas e precisam ser revalidadas com base no log de alterações na origem. Se o destino for especificado como a origem, ele só saberá sobre as alterações enviadas ao destino pelo DMS e não terá a garantia de detectar erros de replicação.

Validação somente de carga máxima

A partir do AWS DMS versão 3.4.6 e superior, uma tarefa somente de validação de carga máxima compara rapidamente todas as linhas das tabelas de origem e de destino em uma única passagem, relata imediatamente quaisquer falhas e é encerrada. A validação nunca é suspensa devido a falhas nesse modo, ela é otimizada para velocidade. Mas as alterações no endpoint de origem ou de destino são relatadas como falhas.

nota

A partir do AWS DMS versão 3.4.6 e superior, esse comportamento da validação também se aplica à tarefa de migração de carga máxima com a validação ativada.

Validação somente de CDC

Uma tarefa somente de validação de CDC valida todas as linhas existentes entre as tabelas de origem e de destino em um novo início. Além disso, uma tarefa somente de validação de CDC é executada continuamente, revalida as alterações de replicação em andamento, limita o número de falhas relatadas em cada passagem e repete as linhas incompatíveis antes de declará-las como falhas. Ela é otimizada para evitar falsos positivos.

A validação de uma tabela (ou de toda a tarefa) será suspensa se os limites de FailureMaxCount ou de TableFailureMaxCount forem violados. Isso também se aplica a uma tarefa de migração de CDC ou de carga máxima+CDC com a validação ativada. E uma tarefa de CDC com validação ativada atrasa a revalidação de cada linha alterada com base na latência média de origem e de destino.

Mas tarefa de somente validação de CDC não migra dados e não tem latência. Ela define ValidationQueryCdcDelaySeconds como 180 por padrão. É possível aumentar a quantidade para considerar ambientes de alta latência e ajudar a evitar falsos positivos.

Casos de uso de somente de validação

Os casos de uso para a divisão da parte de validação de dados de uma tarefa de migração ou replicação em uma tarefa somente de validação separada incluem, mas não estão limitados, ao seguinte:

  • Controle exatamente quando a validação ocorre: as consultas de validação adicionam uma carga extra aos endpoints de origem e de destino. Portanto, migrar ou replicar dados em uma primeira tarefa e validar os resultados em outra tarefa pode ser benéfico.

  • Reduza a carga na instância de replicação: a divisão da validação de dados para execução em sua própria instância pode ser vantajosa.

  • Obtenha rapidamente quantas linhas não correspondem em um determinado momento: por exemplo, imediatamente antes ou durante uma transição para a produção da janela de manutenção para um endpoint de destino, é possível criar uma tarefa de somente validação de carga máxima para obter uma resposta à sua pergunta.

  • Quando falhas de validação são esperadas para uma tarefa de migração com um componente da CDC: por exemplo, ao migrar o Oracle para o varchar2 PostgreSQLjsonb, a validação da CDC continua repetindo essas linhas com falha e limita o número de falhas relatadas a cada vez. Porém, é possível criar uma tarefa somente de validação de carga máxima e obter uma resposta mais rápida.

  • Você desenvolveu um script/utilitário de reparo de dados que lê a tabela com falha de validação: (consulte também Solução de problemas). Uma tarefa somente de validação de carga máxima relata rapidamente as falhas nas quais o script de reparo de dados deve atuar.

Para obter um exemplo das configurações da tarefa ValidationSettings em um arquivo JSON, consulte Exemplo de configurações de tarefas).

Solução de problemas

Durante a validação, o AWS DMS cria uma nova tabela no endpoint de destino: awsdms_control.awsdms_validation_failures_v1. Se qualquer registro entrar no estado ValidationSuspended ou ValidationFailed, o AWS DMS gravará as informações de diagnóstico em awsdms_control.awsdms_validation_failures_v1. É possível consultar essa tabela para ajudar a solucionar erros de validação.

Para obter informações sobre como alterar o esquema padrão em que a tabela é criada no destino, consulte Configurações da tarefa da tabela de controle.

Veja a seguir uma descrição da tabela awsdms_control.awsdms_validation_failures_v1:

Nome da coluna Tipo de dados Descrição

TASK_NAME

VARCHAR(128) NOT NULL

Identificador de tarefa do AWS DMS.

TABLE_OWNER VARCHAR(128) NOT NULL

Schema (proprietário) da tabela.

TABLE_NAME

VARCHAR(128) NOT NULL

Nome da tabela.

FAILURE_TIME DATETIME(3) NOT NULL

Hora em que a falha ocorreu.

KEY_TYPE VARCHAR(128) NOT NULL

Reservado para uso futuro (o valor é sempre 'Linha')

KEY TEXT NOT NULL

Esta é a chave primária para o tipo de registro de linha.

FAILURE_TYPE VARCHAR(128) NOT NULL

Severidade do erro de validação. Pode ser RECORD_DIFF, MISSING_SOURCE ou MISSING_TARGET.

DETAILS VARCHAR(8000) NOT NULL

String formatada em JSON de todos os valores de colunas de origem/destino que não correspondem à chave fornecida.

A consulta a seguir mostra todas as falhas de uma tarefa pela tabela awsdms_control.awsdms_validation_failures_v1. O nome da tarefa deve ser seu ID de recurso externo. O ID de recurso externo da tarefa é o último valor em seu ARN. Por exemplo, para uma tarefa com um valor de ARN arn:aws:dms:us-west-2:5599:task: VFPFKH4FJR3FTYKK2RYSI, o ID de recurso externo será VFPFKH4FJR3FTYKK2RYSI.

select * from awsdms_validation_failures_v1 where TASK_NAME = 'VFPFKH4FJR3FTYKK2RYSI' TASK_NAME VFPFKH4FJR3FTYKK2RYSI TABLE_OWNER DB2PERF TABLE_NAME PERFTEST FAILURE_TIME 2020-06-11 21:58:44 KEY_TYPE Row KEY {"key": ["3451491"]} FAILURE_TYPE RECORD_DIFF DETAILS [[{'MYREAL': '+1.10106036e-01'}, {'MYREAL': '+1.10106044e-01'}],]

É possível examinar o campo DETAILS para determinar quais colunas não correspondem. Como você tem a chave primária do registro que falhou, poderá consultar os endpoints de origem e de destino para ver qual parte do registro não corresponde.

Desempenho da validação do Redshift

O Amazon Redshift difere dos bancos de dados relacionais em vários sentidos, como armazenamento colunar, MPP, compactação de dados e outros fatores. Essas diferenças conferem ao Redshift um perfil de desempenho distinto em relação aos bancos de dados relacionais.

Durante a fase de replicação de carga máxima, a validação usa consultas de intervalo e o tamanho dos dados é controlado pela configuração PartitionSize. Essas consultas baseadas em intervalos selecionam todos os registros da tabela de origem.

Na replicação contínua, as consultas alternam entre buscas de registros individuais e baseadas em intervalos. O tipo de consulta é determinado dinamicamente com base em vários fatores, como os seguintes:

  • Volume de consultas

  • Tipos de consulta DML na tabela de origem

  • Latência de tarefa

  • Número total de registros

  • Configurações de validação, como PartitionSize

Você pode ver uma carga adicional no cluster do Amazon Redshift devido a consultas de validação. Como os fatores acima variam entre os casos de uso, você deve analisar o desempenho da consulta de validação e ajustar o cluster e a tabela adequadamente. Algumas opções para mitigar problemas de desempenho incluem o seguinte:

  • Reduza as configurações ThreadCount e PartitionSize para ajudar a diminuir a workload durante a validação da carga máxima. Observe que isso retardará a validação de dados.

  • Embora o Redshift não imponha chaves primárias, o AWS DMS depende delas para identificar os registros de maneira exclusiva no destino para validação de dados. Se possível, defina a chave primária para espelhar a chave de classificação de forma que as consultas de validação de carga máxima sejam executadas mais rapidamente.

Limitações

  • A validação de dados requer que a tabela tenha uma chave primária ou índice exclusivo.

    • As colunas de chave primária não podem ser do tipo CLOB, BLOB ou BYTE.

    • Para colunas de chave primária do tipo VARCHAR ou CHAR, o comprimento deve ser inferior a 1024. Você deve especificar o tamanho no tipo de dados. Não é possível usar tipos de dados ilimitados como chave primária para validação de dados.

    • Uma chave do Oracle criada com a cláusula NOVALIDATE não é considerada uma chave primária ou um índice exclusivo.

    • Para uma tabela do Oracle sem uma chave primária e somente com uma chave exclusiva, as colunas com a restrição exclusiva também devem ter uma restrição NOT NULL.

  • A validação de valores NULL PK/UK não é compatível.

  • Se o agrupamento da coluna de chave primária na instância PostgreSQL de destino não for definido como "C", a ordem de classificação da chave primária será diferente da ordem de classificação em Oracle. Se a ordem de classificação for diferente entre PostgreSQL e Oracle, a validação de dados não poderá validar os registros.

  • A validação de dados gera consultas adicionais em relação a bancos de dados de origem e destino. Os dois bancos de dados devem ter recursos suficientes para lidar com essa carga adicional. Isso se aplica principalmente aos destinos do Redshift. Para obter mais informações, consulte Desempenho da validação do Redshift a seguir.

  • A validação de dados não é compatível ao consolidar vários bancos de dados em um banco de dados.

  • Para um endpoint Oracle de origem ou destino, o AWS DMS utiliza DBMS_CRYPTO para validar LOBs. Se o endpoint da Oracle usar LOBs, você deverá conceder a permissão de execução em dbms_crypto para a conta de usuário usada para acessar esse endpoint. Para isso, execute a seguinte instrução:

    grant execute on sys.dbms_crypto to dms_endpoint_user;
  • Se o banco de dados de destino for modificado fora do AWS DMS durante a validação, as discrepâncias poderão não ser relatadas com precisão. Esse resultado pode ocorrer caso um de seus aplicativos grave dados na tabela de destino enquanto o AWS DMS está executando a validação na mesma tabela.

  • Se uma ou mais linhas forem modificadas continuamente durante a validação, o AWS DMS não poderá validar essas linhas.

  • Se o AWS DMS detectar mais de 10.000 registros com falha ou suspensos, ele interromperá a validação. Antes de continuar, solucione os problemas subjacentes com os dados.

  • O AWS DMS não é compatível com a validação de dados de visualizações.

  • O AWS DMS não é compatível com a validação de dados quando as configurações da tarefa de substituição de caracteres são utilizadas.

  • O AWS DMS não é compatível com a validação do tipo Oracle LONG.

  • O AWS DMS não é compatível com a validação do tipo Oracle Spatial durante a migração heterogênea.

Para obter as limitações ao utilizar a validação de destino do S3, consulte Limitações da utilização da validação de destino do S3..