AmazonDMS 数据验证 - Amazon Database Migration Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AmazonDMS 数据验证

Amazon DMS提供数据验证支持,以确保准确地将您的数据从源迁移到目标。如果启用该功能,在为表执行完全加载后,立即开始验证。Validated 可以在发生时比较支持 CDC 的任务的增量更改。

在数据验证期间,Amazon DMS将源中的每一行与目标中的相应行进行比较,并确认这些行包含相同的数据,并报告任何不匹配。为了实现这一点Amazon DMS发出相应的查询以检索数据。请注意,这些查询将占用源和目标中的额外资源以及额外的网络资源。

数据验证使用以下数据库,而 Amazon DMS 支持它们作为源终端节点和目标终端节点:

  • Oracle

  • PostgreSQL 兼容的数据库(PostgreSQL、Aurora PostgreSQL 或 Aurora 无服务器用于 PostgreSQL)

  • 与 MySQL 兼容的数据库(MySQL、MariaDB、Aurora MySQL 或 Aurora 无服务器适用于 MySQL)

  • Microsoft SQL Server

  • IBM Db2 LUW

有关支持的终端节点的更多信息,请参阅使用AmazonDMS 终端节点

除了迁移本身所需的时间以外,数据验证还需要占用额外的时间。所需的额外时间取决于迁移的数据量。

数据验证设置包括以下内容:

  • EnableValidation— 启用或禁用数据验证。

  • FailureMaxCount— 指定在暂停任务的验证之前可验证失败的记录的最大数目。

  • HandleCollationDiff— 对于 PostgreSQL 和 SQL Server 数据库,在识别要比较的源记录和目标记录时,此设置考虑终端节点中的列排序规则差异。

  • RecordFailureDelayLimitInMinutes— 指定报告任何验证失败详细信息之前的延迟。

  • TableFailureMaxCount— 指定在暂停任务的验证之前可验证失败的表的最大数目。

  • ThreadCount— 调整执行线程数Amazon DMS在验证过程中使用。

  • ValidationOnly— 预览任务的验证,而不执行任何数据迁移或复制。要使用此选项,请将任务迁移类型设置为仅复制数据更改中的Amazon DMS控制台中,或将迁移类型设置为cdc中的Amazon DMSAPI。此外,将目标表任务设置 TargetTablePrepMode 设置为 DO_NOTHING

    注意

    这些区域有:ValidationOnly设置是不可变的。这意味着在创建任务后,无法对任务进行修改。

  • PartitionSize— 指定要从源和目标中读取以进行比较的记录的批处理大小。默认值为 10,000。

  • SkipLobColumns— 当此选项设置为true、Amazon DMS跳过任务验证的表部分中所有 LOB 列的数据验证。默认值为 false

  • ValidationPartialLobSize— 指定是否希望对 LOB 列执行部分验证,而不是验证列中存储的所有数据。该值以 KB 为单位。默认值是 0,意味着Amazon DMS验证所有 LOB 列数据。

  • ValidationQueryCdcDelaySeconds— 每个 CDC 更新的源和目标上的第一个验证查询延迟的时间量。这可能有助于减少迁移延迟较高时的资源争用。仅验证任务会自动将此选项设置为 180 秒。默认值为 0。

例如,以下 JSON 示例启用验证,将线程数增加到 8,并在任何表发生验证失败时暂停验证。

ValidationSettings": { "EnableValidation":true, "ThreadCount":8, "TableFailureMaxCount":1 }

有关这些设置的更多信息,请参阅 数据验证任务设置

使用 JSON 编辑器修改验证规则

要使用 JSON 编辑器向任务添加验证规则,请从Amazon DMS控制台中,执行以下操作:

  1. Select数据库迁移任务.

  2. 从迁移任务列表中选择任务。

  3. 如果任务正在运行,请选择停止来自 的操作下拉菜单。

  4. 任务停止后,要修改任务,请选择修改来自 的操作下拉菜单。

  5. Table 映射部分中,选择JSON 编辑器,然后将验证规则添加到表映射中。

例如,您可以添加以下验证规则以在源上运行替换函数。在这种情况下,如果验证规则遇到空字节,则会将其验证为空格。

{ "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}" }

复制任务统计数据

如果启用了数据验证,Amazon DMS 将在表级别提供以下统计数据:

  • ValidationState-表的验证状态。该参数可能具有以下值:

    • Not enabled – 没有在迁移任务中为表启用验证。

    • Pending records – 表中的某些记录正在等待验证。

    • Mis匹配的记录— 表中的某些记录在源和目标之间不匹配。可能会因多种原因而发生不匹配;有关更多信息,请参阅目标终端节点上的 awsdms_validation_failures_v1 表。

    • Suspended records – 无法验证表中的某些记录。

    • No primary key – 无法验证表,因为该表没有主键。

    • Table error – 未验证表,因为该表处于错误状态并且未迁移某些数据。

    • Validated— 已验证表中的所有行。如果更新表,则可能会变为非 Validated 状态。

    • Error – 无法验证表,因为出现意外错误。

    • 等待验证-表正在等待验证。

    • Papation Table-准备迁移任务中启用的表以进行验证。

    • 等待重新验证— 在更新表后,表中的所有行都等待验证。

  • ValidationPending – 已迁移到目标但尚未验证的记录数。

  • ValidationSuspended – Amazon DMS 无法比较的记录数。例如,如果持续更新源中的记录,Amazon DMS 将无法比较源和目标。有关更多信息,请参阅 。错误处理任务设置

  • ValidationFailed— 未通过数据验证阶段的记录数。有关更多信息,请参阅错误处理任务设置

您可以使用控制台、Amazon CLI,或Amazon DMSAPI。

  • 在控制台中,您可以选择在创建或修改任务时验证该任务。要使用控制台查看数据验证报告,请在任务页中选择任务,然后在详细信息部分中选择表统计数据选项卡。

  • 在使用 CLI 时,请在创建或修改任务时将 EnableValidation 参数设置为 true 以开始数据验证。以下示例创建一个任务并启用数据验证。

    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"}]}'

    可以使用 describe-table-statistics 命令接收 JSON 格式的数据验证报告。以下命令显示数据验证报告。

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

    该报告类似于以下内容。

    { "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 } }
  • 使用Amazon DMSAPI 中,使用CreateReplicationTask操作并设置EnableValidation参数设置为true来验证任务迁移的数据。可以使用 DescribeTableStatistics 操作接收 JSON 格式的数据验证报告。

Amazon CloudWatch 使用复制任务统计数据

启用 Amazon CloudWatch 功能后,Amazon DMS提供了以下复制任务统计信息:

  • ValidationSucceededRecordCount— 以下行数为单位Amazon DMS验证,每分钟。

  • ValidationAttemptedRecordCount – 每分钟尝试验证的行数。

  • ValidationFailedOverallCount – 验证失败的行数。

  • ValidationSuspendedOverallCount – 验证已暂停的行数。

  • ValidationPendingOverallCount – 验证待处理的行数。

  • ValidationBulkQuerySourceLatency 储—Amazon DMS可以批量验证数据,特别是在有许多更改时进行完全加载和持续复制期间的特定场景中。此指标指示从源终端节点读取批量数据所需的延迟。

  • ValidationBulkQueryTargetLatency—Amazon DMS可以批量验证数据,特别是在有许多更改时进行完全加载和持续复制期间的特定场景中。此指标指示从目标终端节点读取批量数据所需的延迟。

  • ValidationItemQuerySourceLatency 储— 在持续复制期间,数据验证可以标识持续更改并验证这些更改。此指标指示从源中读取这些更改时的延迟。验证可根据更改数运行比所需数量更多的查询,前提是验证期间出错。

  • ValidationItemQueryTargetLatency— 在持续复制期间,数据验证可以标识持续更改并逐行验证这些更改。此指标向我们提供从目标读取这些更改时的延迟。验证可根据更改数运行比所需数量更多的查询,前提是验证期间出错。

要从启用 CloudWatch 的统计信息收集数据验证信息,请选择启用 CloudWatch 日志使用控制台创建或修改任务时。然后,要查看数据验证信息并确保准确地将数据从源迁移到目标,请执行以下操作。

  1. 选择数据库迁移任务页.

  2. 选择CloudWatch 指标选项卡。

  3. Select验证从下拉菜单中。

在任务期间重新验证表

在任务运行时,您可以请求 Amazon DMS 执行数据验证。

Amazon Web Services Management Console

  1. 登录到Amazon Web Services Management Console并打开Amazon DMS控制台位于https://console.aws.amazon.com/dms/v2/.

    如果您以Amazon Identity and Access Management(IAM) 用户,请确保您具有访问权限Amazon DMS。所需权限,请参阅使用 Amazon DMS 所需的 IAM 权限.

  2. 从导航窗格中选择任务

  3. 选择具有要重新验证的表的正在运行的任务。

  4. 选择表统计数据选项卡。

  5. 选择您要重新验证的表(一次最多可选择 10 个表)。如果任务不再运行,则您无法重新验证该表。

  6. 选择 Revalidate (重新验证)

Troubleshooting

在验证过程中,Amazon DMS在目标终端节点中创建一个新表:awsdms_validation_failures_v1. 如果有任何记录输入ValidationSuspendedValidationFailed状态,Amazon DMS将诊断信息写入awsdms_validation_failures_v1. 您可以查询该表以帮助纠正验证错误。

以下是 awsdms_validation_failures_v1 表描述:

列名称 数据类型 描述

TASK_NAME

VARCHAR(128) NOT NULL

Amazon DMS 任务标识符。

TABLE_OWNER VARCHAR(128) NOT NULL

表的架构 (所有者)。

TABLE_NAME

VARCHAR(128) NOT NULL

表名称。

FAILURE_TIME DATETIME(3) NOT NULL

发生失败的时间。

KEY_TYPE VARCHAR(128) NOT NULL

保留供将来使用(值始终为 “行”)

KEY TEXT NOT NULL

这是行记录类型的主键。

FAILURE_TYPE VARCHAR(128) NOT NULL

验证错误的严重性。可以是RECORD_DIFFMISSING_SOURCE或者MISSING_TARGET.

DETAILS VARCHAR(8000) NOT NULL

JSON 格式化的所有源/目标列值与给定键不匹配的字符串。

通过查询 awsdms_validation_failures_v1 表,以下查询显示任务的所有失败。任务名称应该是任务的外部资源 ID。任务的外部资源 ID 是任务 ARN 中的最后一个值。例如,对于 ARN 值为 arn: aw: dms: us-west-2:5599: 任务:执行以下操作:VFPFKH4FJR3FTYKK2RYSI 中,任务的外部资源 ID 为 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'}],]

您可以查看DETAILS字段来确定哪些列不匹配。由于您拥有失败记录的主键,因此您可以查询源和目标终端节点以查看记录的哪个部分不匹配。

Limitations

  • 数据验证要求表具有主键或唯一索引。

    • 主键列不能是 CLOBBLOBBYTE 类型。

    • 对于 VARCHARCHAR 类型的主键列,长度必须小于 1024。

  • 如果目标 PostgreSQL 实例中的主键列的排序规则未设置为“C”,则与 Oracle 中的排序顺序相比,PostgreSQL 的主键的排序顺序将不同。如果 PostgreSQL 和 Oracle 的排序顺序不同,数据验证将无法验证记录。

  • 数据验证将针对源和目标数据库生成额外的查询。您必须确保两个数据库具有足够的资源以处理该额外负载。

  • 如果迁移使用自定义筛选或将几个数据库合并为一个数据库,则不支持数据验证。

  • 对于源或目标 Oracle 终端节点,Amazon DMS 使用 DBMS_CRYPTO 来验证 LOB。如果 Oracle 终端节点使用 LOB,则必须为用于访问 Oracle 终端节点的用户账户授予 dbms_crypto 执行权限。您可以运行以下语句以执行该操作:

    grant execute on sys.dbms_crypto to dms_endpoint_user;
  • 如果验证期间在 Amazon DMS 外部修改了目标数据库,则可能不会准确报告差异。如果在 Amazon DMS 对目标表执行验证期间,某个应用程序将数据写入到该表中,则可能会发生这种情况。

  • 如果在验证期间持续修改一个或多个行,则 Amazon DMS 无法验证这些行。不过,您可以在任务完成后手动验证这些行。

  • 如果 Amazon DMS 检测到超过 10000 个失败或无法验证的记录,则会停止验证。在继续之前,先解决数据的任何根本问题。

  • Amazon DMS不支持视图的数据验证。