当我使用 AWS Database Migration Service (AWS DMS) 将源数据库迁移到 Amazon Redshift 时,我遇到数据复制和更改数据捕获 (CDC) 失败的问题。
解决方法
CDC 失败
如果您遇到 CDC 失败,请查看 AWS DMS 任务日志中是否存在与特定表相关的错误消息。您还可以查看 AWS DMS 任务的 Amazon CloudWatch 指标 CDCLatencySource 和 CDCLatencyTarget。
根据您收到的错误消息,执行以下一项或多项操作:
- 验证源表是否具有主键。对于 PostgreSQL 源,捕获的表必须具有主键,AWS DMS 才能处理 DELETE 和 UPDATE 操作。
- 确认将源数据库的更改日志保留期设置为至少 24 小时。
- 确保 AWS DMS 使用的 AWS 账户具有源数据库和目标数据库所需的权限。
数据不一致
要解决数据不一致问题,请完成以下步骤:
- 创建仅验证的任务,识别源和目标之间不匹配的记录。有关更多信息,请参阅 Redshift 验证性能。
- 查询目标数据库中的 awsdms_validation_failures_v1 表以查看不一致的数据。
- 检查目标数据库上的 awsdms_apply_exceptions 表,了解有关迁移失败的详细错误信息。
- 验证所有复制的目标表是否都具有主键或唯一索引。
**注意:**Amazon Redshift 不强制要求唯一性、主键和外键约束。因此,可能会出现重复。
- 如果您使用 PostgreSQL 作为源,则必须为源表和目标表定义主键。
- 对于存在不一致的表,请使用 AWS DMS 任务重新加载这些表。
类型转换问题
要解决类型转换问题,请完成以下步骤:
-
查看 AWS DMS 任务日志中是否存在与数据截断或字符串长度超出数据定义语言 (DDL) 长度相关的错误。
-
检查 awsdms_apply_exceptions 表中是否存在迁移失败的情况。
-
调整目标 Redshift 数据库中的列数据类型以适应更大的数据。例如,对于存在长度问题的列,请将 varchar 更改为 text。
-
修改任务设置中的 MaxLobSize 参数以处理更大的数据大小,如以下示例所示:
{
"TargetMetadata": {
"MaxLobSize": 32
}
}
-
确认您使用的是支持的数据类型,并确保已正确映射源和目标。
性能问题和高延迟
要提高性能并减少延迟,请执行以下操作:
重复记录
为防止出现重复记录,请执行以下操作:
- 确认复制的目标表具有主键或唯一索引。
- 在目标上手动创建带有主键的表,并在任务设置中将 TargetTablePrepMode 设置为 DO_NOTHING 或 TRUNCATE_BEFORE_LOAD。
- 使用 primary-key-def AWS DMS 表映射规则来显式定义主键。
数据缺失或不完整
要解决数据缺失或不完整的问题,请执行以下操作:
- 查看 AWS DMS 任务日志是否存在与特定表相关的警告或错误。
- 检查 CDCIncomingChanges 指标,确定 AWS DMS 是否捕获了来自源的所有更改。
- 验证 AWS DMS 使用的源数据库用户账户是否具有访问所有必需表和架构的必要权限。
- 创建仅验证的任务以识别不匹配的记录。有关更多信息,请参阅 Redshift 验证性能。
- 对于存在持续问题的表,您可以创建单独的 AWS DMS 任务,以便更精细地进行故障排除。
相关信息
AWS Database Migration Service 的最佳实践
对 AWS Database Migration Service 中的迁移任务进行故障排除
AWS DMS 数据验证