AWS Database Migration Service
用户指南 (版本 API Version 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

验证 AWS DMS 任务

AWS DMS 提供数据验证支持,以确保准确地将数据从源迁移到目标。如果为任务启用该功能,在为表执行完全加载后,AWS DMS 立即开始比较源和目标数据。

数据验证是可选的。AWS DMS 比较源和目标记录并报告所有不匹配项。此外,对于支持 CDC 的任务,AWS DMS 还比较增量更改并报告所有不匹配项。

在数据验证期间,AWS DMS 将源中的每一行与目标中的相应行进行比较,并确认这些行包含相同的数据。要完成该操作,AWS DMS 发出相应的查询以检索数据。请注意,这些查询将占用源和目标中的额外资源以及额外的网络资源。

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

  • Oracle

  • PostgreSQL

  • MySQL

  • MariaDB

  • Microsoft SQL Server

  • Amazon Aurora (MySQL)

  • Amazon Aurora (PostgreSQL)

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

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

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

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

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

  • HandleCollationDiff – 在识别要比较的源记录和目标记录时,考虑 PostgreSQL 终端节点中的列排序规则差异。

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

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

  • ThreadCount – 调整 AWS DMS 在验证期间使用的执行线程数。

  • ValidationOnly – 预览任务的验证,而不执行任何数据迁移或复制。

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

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

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

复制任务统计数据

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ValidationSucceededRecordCount — AWS DMS 每分钟验证的行数。

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

  • ValidationFailedOverallCount — 验证失败的行数。

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

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

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

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

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

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

您可以使用 控制台、AWS CLI 或 AWS DMS API 查看数据验证信息。

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

  • 在使用 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 } }
  • 在使用 AWS DMS API 时,请使用 CreateReplicationTask 操作创建一个任务,并将 EnableValidation 参数设置为 true 以验证该任务迁移的数据。可以使用 DescribeTableStatistics 操作接收 JSON 格式的数据验证报告。

在任务期间重新验证表

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

AWS 管理控制台

  1. 登录 AWS 管理控制台并选择 AWS DMS。如果以 AWS Identity and Access Management (IAM) 用户身份登录,则必须具有 AWS DMS 的相应访问权限。有关所需权限的更多信息,请参阅使用 AWS DMS 所需的 IAM 权限

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

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

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

  5. 选择要重新验证的表。如果任务不再运行,则您无法重新验证该表。

  6. 选择 Revalidate (重新验证)

问题排查

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

以下是 awsdms_validation_failures_v1 表描述:

列名称 数据类型 说明

TASK_NAME

VARCHAR(128) NOT NULL

AWS DMS 任务标识符。

TABLE_OWNER VARCHAR(128) NOT NULL

表的架构 (所有者)。

TABLE_NAME

VARCHAR(128) NOT NULL

表名称。

FAILURE_TIME DATETIME(3) NOT NULL

发生失败的时间。

KEY TEXT NOT NULL

这是行记录类型的主键。

FAILURE_TYPE VARCHAR(128) NOT NULL

验证错误的严重性。可以是 FailedSuspended

通过查询 awsdms_validation_failures_v1 表,以下查询显示任务的所有失败。任务名称应该是任务的外部资源 ID。任务的外部资源 ID 是任务 ARN 中的最后一个值。例如,对于 ARN 值为 arn:aws:dms:us-west-2:5599:task: VFPFKH4FJR3FTYKK2RYSI 的任务,任务的外部资源 ID 为 VFPFKH4FJR3FTYKK2RYSI。

select * from awsdms_validation_failures_v1 where TASK_NAME = 'VFPFKH4FJR3FTYKK2RYSI'

在知道了失败记录的主键后,您可以查询源和目标终端节点以查看记录的哪个部分不匹配。

限制

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

    • 主键列不能是 CLOBBLOBBYTE 类型。

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

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

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

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

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

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

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

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