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

排除 AWS Database Migration Service 中的迁移任务问题

下面几节提供有关解决 AWS Database Migration Service (AWS DMS) 相关问题的信息。

缓慢运行的迁移任务

多个问题可能导致迁移任务运行缓慢,或导致后续任务的运行速度慢于初始任务的运行速度。导致迁移任务运行缓慢的最常见原因是,分配给 AWS DMS 复制实例的资源不足。检查您的复制实例对 CPU、内存、交换文件和 IOPS 的使用,以确保您的实例拥有足够的资源来运行任务。例如,多个将 Amazon Redshift 作为终端节点的任务是 IO 密集型的。您可以增加复制实例的 IOPS 或跨多个复制实例拆分任务以实现更高效的迁移。

有关如何确定复制实例的大小的更多信息,请参阅选择复制实例的最优大小

您可以执行以下操作来提高初始迁移加载的速度:

  • 如果您的目标是 Amazon RDS 数据库实例,请确保未为目标数据库实例启用多可用区。

  • 在加载期间关闭目标数据库上的任何自动备份或日志记录功能,并在迁移完成后重新启用这些功能。

  • 如果该功能在目标上可用,请使用预置 IOPS。

  • 如果迁移数据包含 LOB,请确保已针对 LOB 迁移优化任务。有关针对 LOB 进行优化的更多信息,请参阅目标元数据任务设置

任务状态栏未移动

任务状态栏提供了任务进度的估计值。此估计值的质量取决于源数据库的表统计数据的质量;表统计数据的质量越好,估计值就越准确。对于只有一个表而且该表没有预计行统计数据的任务,我们无法提供任何类型的完成百分比估计值。在此情况下,可使用任务状态和加载行的指示来确认任务是否确实在运行且取得进展。

缺少外键和辅助索引

AWS DMS 会创建表、主键和(在某些情况下)唯一索引,但不会创建有效迁移源中的数据时不需要的任何其他对象。例如,它不会创建二级索引、非主键约束或数据默认值。

要迁移数据库中的二级对象,请使用数据库的本机工具 (如果您将迁移到与源数据库相同的数据库引擎)。如果您将迁移到的数据库引擎不同于源数据库用来迁移二级对象的数据库引擎,请使用 Schema Conversion Tool。

Amazon RDS 连接问题

有多个原因导致您无法连接到设为终端节点的 Amazon RDS 数据库实例。包括:

  • 用户名和密码组合不正确。

  • 检查 Amazon RDS 控制台中为实例显示的终端节点值是否与用于创建 AWS DMS 终端节点的终端节点标识符相同。

  • 检查 Amazon RDS 控制台中为实例显示的端口值是否与分配给 AWS DMS 终端节点的端口相同。

  • 检查分配给 Amazon RDS 数据库实例的安全组是否允许来自 AWS DMS 复制实例的连接。

  • 如果 AWS DMS 复制实例和 Amazon RDS 数据库实例不在同一 VPC 中,请检查数据库实例是否可公开访问。

错误消息:线程连接字符串不正确:线程值 0 不正确

在测试与终端节点的连接时通常会出现此错误。此错误指示,连接字符串中存在错误 (例如,主机 IP 地址后有空格或已将错误字符复制到连接字符串)。

联网问题

最常见的联网问题涉及 AWS DMS 复制实例所使用的 VPC 安全组。默认情况下,此安全组中的规则允许在所有端口上进入 0.0.0.0/0。如果您修改此安全组或者使用自己的安全组,则必须至少允许传出到相应数据库端口上的源和目标终端节点。

其他配置相关问题包括:

  • 复制实例和同一 VPC 中的源和目标终端节点 — 终端节点所使用的安全组必须允许通过数据库端口从复制实例访问。确保由复制实例使用的安全组已传入到终端节点,或者您可以在由终端节点使用的安全组中创建规则,允许访问复制实例的私有 IP 地址。

  • 源终端节点位于复制实例所使用的 VPC 的外部(使用 Internet 网关)— VPC 安全组必须包含将未指定发往 VPC 的流量发送到 Internet 网关的路由规则。在此配置中,与终端节点的连接显示为来自复制实例上的公有 IP 地址。

  • 源终端节点位于复制实例所使用的 VPC 的外部(使用 NAT 网关)— 您可以使用绑定到单个弹性网络接口(将接收 NAT 标识符 (nat-#####))的单个弹性 IP 地址来配置网络地址转换 (NAT) 网关。如果 VPC 包含到 NAT 网关而不是 Internet 网关的默认路由,复制实例将改为显示使用 Internet 网关的公有 IP 地址连接数据库终端节点。在这种情况下,对 VPC 外部的数据库终端节点的传入需要允许从 NAT 地址的传入,而不是复制实例的公有 IP 地址。

CDC 在完全加载后粘滞

在多个 AWS DMS 设置相互冲突的情况下,复制更改在完全加载迁移后将减慢或粘滞。例如,如果目标表准备模式参数设置为不执行任何操作截断,则指示 AWS DMS 不对目标表进行任何设置,包括创建主键和唯一索引。如果尚未在目标表上创建主键或唯一键,则 AWS DMS 必须对每个更新执行全表扫描,这将大大影响性能。

重新启动任务时出现主键冲突错误

当数据保留在上一个迁移任务中的目标数据库中时,会出现此错误。如果目标表准备模式参数设置为不执行任何操作,则 AWS DMS 不会对目标表进行任何准备,包括清理从上一任务中插入的数据。要重新启动任务并避免出现这些错误,您必须删除上次运行任务时插入目标表中的行。

架构初始加载失败

如果架构的初始加载失败并出现错误 Operation:getSchemaListDetails:errType=, status=0, errMessage=, errDetails=,则 AWS DMS 用来连接到源终端节点的用户账户不具有必要权限。

任务失败,并出现未知错误

虽然导致出现这些类型的错误的原因多种多样,但是通常我们会发现,该问题与分配给 AWS DMS 复制实例的资源不足有关。检查复制实例对 CPU、内存、交换文件和 IOPS 的使用,确保您的实例拥有足够的资源来执行迁移。有关监控的更多信息,请参阅数据迁移服务指标

任务重新启动操作从头开始加载表

AWS DMS 在未完成表的初始加载时重新开始表加载。当任务重新启动时,AWS DMS 不会重新加载已完成初始加载的表,而将在初始加载未完成时重新从头开始加载表。

每个任务的表数

虽然未对每个复制任务的表数设置限制,但我们通常会发现,将任务中的表数限制为小于 60000 是一个好方法。当单个任务使用 60000 个以上的表时,资源使用通常是一个瓶颈。

解决 Oracle 特定的问题

以下问题是将 AWS DMS 用于 Oracle 数据库时所特有的。

从视图中提取数据

您可以从视图中提取一次数据;您无法将其用于持续复制。要能够从视图中提取数据,您必须将以下代码添加到 Oracle 源终端节点的高级部分的额外的连接属性中。请注意,从视图中提取数据时,该视图将显示为目标架构上的表。

exposeViews=true

从 Oracle 12c 迁移 LOB

AWS DMS 可使用以下两种方法捕获对 Oracle 数据库进行的更改:Binary Reader 和 Oracle LogMiner。默认情况下,AWS DMS 使用 Oracle LogMiner 捕获更改。但在 Oracle 12c 上,Oracle LogMiner 不支持 LOB 列。要捕获对 Oracle 12c 上的 LOB 列进行的更改,请使用 Binary Reader。

在 Oracle LogMiner 和 Binary Reader 之间切换

AWS DMS 可使用以下两种方法捕获对源 Oracle 数据库进行的更改:Binary Reader 和 Oracle LogMiner。默认情况下,使用 Oracle LogMiner。要切换到使用 Binary Reader 捕获更改,请执行以下操作:

使用 Binary Reader 捕获更改

  1. 登录到 AWS 管理控制台,然后选择“DMS”。

  2. 选择终端节点

  3. 选择要使用 Binary Reader 的 Oracle 源终端节点。

  4. 选择 Modify

  5. 选择“高级”,然后将以下代码添加到“额外的连接属性”文本框中:

    useLogminerReader=N
  6. 使用 Oracle 开发人员工具(例如 SQL-Plus)将以下附加权限授予用于连接到 Oracle 终端节点的 AWS DMS 用户账户:

    SELECT ON V_$TRANSPORTABLE_PLATFORM

错误:Oracle CDC 已停止 122301 Oracle CDC 已超出最大重试计数器。

如果在 AWS DMS 能够使用所需的 Oracle 存档日志捕获更改之前从服务器中删除该日志,则会出现此错误。增加数据库服务器上的日志保留策略。对于 Amazon RDS 数据库,请运行以下过程来增加日志保留期。例如,以下代码将 Amazon RDS 数据库实例上的日志保留期增至 24 小时。

Exec rdsadmin.rdsadmin_util.set_configuration(‘archivelog retention hours’,24);

自动将补充日志记录添加到 Oracle 源终端节点

默认情况下,AWS DMS 已禁用补充日志记录。要自动为源 Oracle 终端节点启用补充日志记录,请执行以下操作:

将补充日志记录添加到源 Oracle 终端节点

  1. 登录到 AWS 管理控制台,然后选择 DMS

  2. 选择终端节点

  3. 选择要将补充日志记录添加到的 Oracle 源终端节点。

  4. 选择 Modify

  5. 选择高级,然后将以下代码添加到额外的连接属性文本框中:

    addSupplementalLogging=Y
  6. 选择 Modify

未捕获 LOB 更改

当前,表必须具有 AWS DMS 的主键才能捕获 LOB 更改。如果包含 LOB 的表不具有主键,您可以执行多个操作来捕获 LOB 更改:

  • 向表添加主键。此操作与添加 ID 列并使用触发器向该列填充序列一样简单。

  • 创建将系统生成的 ID 包含为主键的表的实体化视图,并迁移该实体化视图而非表。

  • 创建逻辑备用,向表添加主键并从逻辑备用迁移。

错误:ORA-12899: 值对于列 <column-name> 过大

错误“ORA-12899: 值对于列 <column-name> 过大”通常是由于源和目标数据库使用的字符集中的不匹配项或这两个数据库之间的 NLS 设置不同导致的。通常,当源数据库 NLS_LENGTH_SEMANTICS 参数设置为 CHAR 而目标数据库 NLS_LENGTH_SEMANTICS 参数设置为 BYTE 时,会出现此错误。

未正确解释 NUMBER 数据类型

Oracle NUMBER 数据类型将转换为各种 AWS DMS 数据类型,具体取决于 NUMBER 的精度和小数位数。此处记录了这些转换:将 Oracle 数据库作为 AWS DMS 源将适用于 Linux、Unix 和 Windows 数据库的 IBM Db2 (Db2 LUW) 用作 AWS DMS 源。使用源 Oracle 终端节点的额外连接属性也会影响 NUMBER 类型的转换方式。将 Oracle 作为 AWS DMS 源时的额外连接属性中记录了这些额外连接属性。

解决 MySQL 特定的问题

以下问题是将 AWS DMS 用于 MySQL 数据库时所特有的。

由于已禁用二进制日志记录,无法为 Amazon RDS 数据库实例终端节点完成 CDC 任务

Amazon RDS 数据库实例会因禁用自动化备份而出现该问题。可通过将备份保留期设置为非零值来启用自动备份。

与目标 MySQL 实例的连接在任务期间中断

如果涉及 LOB 的任务与 MySQL 目标的连接断开,并且任务日志中出现以下类型的错误,则可能需要调整某些任务设置。

[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: 08S01 NativeError: 2013 Message: [MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16-log]Lost connection to MySQL server during query [122502] ODBC general error.
[TARGET_LOAD ]E: RetCode: SQL_ERROR SqlState: HY000 NativeError: 2006 Message: [MySQL][ODBC 5.3(w) Driver]MySQL server has gone away [122502] ODBC general error.

要解决任务与 MySQL 目标的连接断开的问题,请执行以下操作:

  • 检查数据库变量 max_allowed_packet 集是否足以保留您的最大 LOB。

  • 检查您是否让以下变量集具有较大的超时值。建议您对其中每个变量使用的值至少为 5 分钟。

    • net_read_timeout

    • net_write_timeout

    • wait_timeout

    • interactive_timeout

将自动提交添加到与 MySQL 兼容的终端节点

将自动提交添加到与 MySQL 兼容的目标终端节点

  1. 登录到 AWS 管理控制台,然后选择 DMS

  2. 选择终端节点

  3. 选择要将自动提交添加到的与 MySQL 兼容的目标终端节点。

  4. 选择 Modify

  5. 选择高级,然后将以下代码添加到额外的连接属性文本框中:

    Initstmt= SET AUTOCOMMIT=1
  6. 选择 Modify

在与 MySQL 兼容的目标终端节点上禁用外键

在目标 MySQL、Amazon Aurora 与 MySQL 的兼容性 或 MariaDB 终端节点的 Advanced (高级) 部分的 Extra Connection Attributes (额外的连接属性) 中,可以添加以下内容从而在 MySQL 上禁用外键检查。

在与 MySQL 兼容的目标终端节点上禁用外键

  1. 登录到 AWS 管理控制台,然后选择 DMS

  2. 选择终端节点

  3. 选择要禁用外键的 MySQL、Aurora MySQL 或 MariaDB 目标终端节点。

  4. 选择 Modify

  5. 选择高级,然后将以下代码添加到额外的连接属性文本框中:

    Initstmt=SET FOREIGN_KEY_CHECKS=0
  6. 选择 Modify

字符被替换为问号

导致出现该问题的最常见情况是,当源终端节点字符使用了 AWS DMS 不支持的字符集进行编码时。例如,AWS DMS 不支持 UTF8MB4 字符集。

“错误事件”日志条目

迁移日志中的“错误事件”条目通常指示已对源数据库终端节点尝试执行不受支持的 DDL 操作。不支持的 DDL 操作会导致复制实例无法跳过的事件,从而导致记录错误事件。要纠正该问题,请从头重新启动该任务,这将重新加载表,并且将在发出不受支持的 DDL 操作后的某个时间点开始捕获更改。

使用 MySQL 5.5 的更改数据捕获

适用于与 Amazon RDS MySQL 兼容的数据库的 AWS DMS 更改数据捕获 (CDC) 需要基于完整图像行的二进制日志记录,此功能在 MySQL 版本 5.5 或早期版本中不受支持。要使用 AWS DMS CDC,必须将 Amazon RDS 数据库实例升级到 MySQL 版本 5.6。

增加 Amazon RDS 数据库实例的二进制日志保留期

AWS DMS 需要为更改数据捕获保留二进制日志文件。要增加 Amazon RDS 数据库实例上的日志保留期,请使用以下过程。以下示例将二进制日志保留期增至 24 小时。

Call mysql.rds_set_configuration(‘binlog retention hours’, 24);

日志消息:源数据库中的一些更改在应用于目标数据库时不起作用。

当 AWS DMS 将 MySQL 数据库列的值更新为其现有值时,将从 MySQL 返回消息 zero rows affected。此行为与其他数据库引擎 (例如,Oracle 和 SQL Server) 的行为不同,后者将执行单行更新,甚至在替换值与当前值相同时也是如此。

错误:标识符太长

当标识符太长时,会出现以下错误:

TARGET_LOAD E: RetCode: SQL_ERROR SqlState: HY000 NativeError: 1059 Message: MySQLhttp://ODBC 5.3(w) Driverhttp://mysqld-5.6.10Identifier name ‘<name>’ is too long 122502 ODBC general error. (ar_odbc_stmt.c:4054)

当 AWS DMS 设置为在目标数据库中创建表和主键时,它当前不会对源数据库中已使用的主键使用相同的名称。相反,AWS DMS 创建基于表名的主键名。当表名较长时,创建的自动生成的标识符的长度会超出 MySQL 允许的限制。目前,要解决该问题,请在目标数据库中预创建表和主键,并使用将目标表准备模式任务设置设为不执行任何操作截断的任务填充目标表。

错误:不受支持的字符集导致字段数据转换失败

当不受支持的字符集导致字段数据转换失败时,会出现以下错误:

"[SOURCE_CAPTURE ]E: Column ‘<column name>' uses an unsupported character set [120112] A field data conversion failed. (mysql_endpoint_capture.c:2154)

此错误通常是因使用 UTF8MB4 编码的表或数据库导致的。AWS DMS 不支持 UTF8MB4 字符集。此外,请检查与连接相关的数据库参数。以下命令可用于查看这些参数:

SHOW VARIABLES LIKE '%char%';

错误:代码页 1252 到 UTF8 [120112] 字段数据转换失败

如果源 MySQL 数据库中具有非代码页 1252 字符,则在迁移过程中可能会发生以下错误。

[SOURCE_CAPTURE ]E: Error converting column ‘column_xyz’ in table 'table_xyz with codepage 1252 to UTF8 [120112] A field data conversion failed. (mysql_endpoint_capture.c:2248)

解决办法是:您可以对您的源 MySQL 终端节点使用 CharsetMapping 额外连接属性来指定字符集映射。如果您添加了此额外连接属性,则可能需要从头重新启动 AWS DMS 迁移任务。

例如,下面的额外连接属性可用于源字符集为 utf8latin1 的 MySQL 源终端节点。65001 是 UTF8 代码页标识符。

CharsetMapping=utf8,65001 CharsetMapping=latin1,65001

解决 PostgreSQL 特定的问题

以下问题是将 AWS DMS 用于 PostgreSQL 数据库时所特有的。

JSON 数据类型被截断

AWS DMS 将 PostgreSQL 中的 JSON 数据类型视为 LOB 数据类型列。这意味着,使用“受限 LOB 模式”时的 LOB 大小限制适用于 JSON 数据。例如,如果将“受限 LOB 模式”设置为 4096 KB,任何大于 4096 KB 的 JSON 数据将在 4096 KB 限制处截断,并且 PostgreSQL 中的验证测试失败。

例如,以下日志信息显示由于“受限 LOB 模式”设置而截断并且验证失败的 JSON。

03:00:49 2017-09-19T03:00:49 [TARGET_APPLY ]E: Failed to execute statement: 'UPDATE "public"."delivery_options_quotes" SET "id"=? , "enabled"=? , "new_cart_id"=? , "order_id"=? , "user_id"=? , "zone_id"=? , "quotes"=? , "start_at"=? , "end_at"=? , "last_quoted_at"=? , "created_at"=? , "updated_at"=? WHERE "id"=? ' [1022502] (ar_odbc_stmt 2017-09-19T03:00:49 [TARGET_APPLY ]E: Failed to execute statement: 'UPDATE "public"."delivery_options_quotes" SET "id"=? , "enabled"=? , "new_cart_id"=? , "order_id"=? , "user_id"=? , "zone_id"=? , "quotes"=? , "start_at"=? , "end_at"=? , "last_quoted_at"=? , "created_at"=? , "updated_at"=? WHERE "id"=? ' [1022502] (ar_odbc_stmt.c:2415)  03:00:49 2017-09-19T03:00:49 [TARGET_APPLY ]E: RetCode: SQL_ERROR SqlState: 22P02 NativeError: 1 Message: ERROR: invalid input syntax for type json;, Error while executing the query [1022502] (ar_odbc_stmt.c:2421) 2017-09-19T03:00:49 [TARGET_APPLY ]E: RetCode: SQL_ERROR SqlState: 22P02 NativeError: 1 Message: ERROR: invalid input syntax for type json;, Error while executing the query [1022502] (ar_odbc_stmt.c:2421)

用户定义的数据类型的列未正确迁移

在从 PostgreSQL 源复制时,AWS DMS 将为所有列(带用户定义的数据类型的列除外)创建带相同数据类型的目标表。在此类情况下,在目标中创建数据类型作为“可变字符”。

错误:未选择要在其中执行创建操作的架构

当您的 JSON 表映射包含架构的通配符值,但源数据库不支持该值时,会出现错误“SQL_ERROR SqlState: 3F000 本地错误: 7 消息: 错误: 未选择要在其中执行创建操作的架构”。

未使用 CDC 复制针对表的删除内容和更新内容

如果源表不具有主键,则将在更改数据捕获 (CDC) 期间忽略删除和更新操作。AWS DMS 在具有主键的 PostgreSQL 表中支持更改数据捕获 (CDC);如果表没有主键,则 WAL 日志不包含数据库行的前映像并且 AWS DMS 无法更新表。如果您希望复制删除操作,请在源表上创建主键。

未传播截断语句

在使用更改数据捕获 (CDC) 时,AWS DMS 不支持 TRUNCATE 操作。

阻止 PostgreSQL 捕获 DDL

您可以添加以下额外的连接属性语句以禁止 PostgreSQL 目标终端节点捕获 DDL 语句。额外的连接属性参数是在源终端节点的高级选项卡中提供的。

captureDDLs=N

选择在其中创建用于捕获 DDL 的数据库对象的架构

您可以控制在哪些架构中创建用于捕获 DDL 的数据库对象。请添加以下额外的连接属性语句。额外的连接属性参数是在目标终端节点的高级选项卡中提供的。

ddlArtifactsSchema=xyzddlschema

迁移到 PostgreSQL 后缺少 Oracle 表

Oracle 默认为大写形式的表名,而 PostgreSQL 默认为小写形式的表名。在执行从 Oracle 到 PostgreSQL 的迁移时,您最可能需要在任务的表映射部分下提供转换规则以转换表名的大小写形式。

您的表和数据仍可访问;如果您在未使用转换规则来转换表名的大小写的情况下迁移表,则需要在引用表名时为其添加引号。

使用视图作为源的任务未复制行

AWS DMS 不支持将视图作为 PostgreSQL 源终端节点。

解决 Microsoft SQL Server 特定的问题

以下问题是将 AWS DMS 用于 Microsoft SQL Server 数据库时所特有的。

AWS DMS 用户账户在使用 CDC 时所需的特殊权限

用于 AWS DMS 的用户账户需要 SQL Server SysAdmin 角色才能在使用更改数据捕获 (CDC) 时正常工作。CDC for SQL Server 仅适用于本地数据库或 EC2 实例上的数据库。

捕获 SQL Server 数据库的更改时出错

更改数据捕获 (CDC) 期间出错通常指示未满足某个先决条件。例如,最常被忽视的先决条件是完整数据库备份。任务日志中会指出此忽略以及以下错误:

SOURCE_CAPTURE E: No FULL database backup found (under the 'FULL' recovery model). To enable all changes to be captured, you must perform a full database backup. 120438 Changes may be missed. (sqlserver_log_queries.c:2623)

将 Microsoft SQL Server 数据库作为 AWS DMS 源中查看有关将 SQL Server 作为源的先决条件。

缺少身份列

在创建目标架构时,AWS DMS 不支持身份列。在初始加载完成后,必须添加这些列。

错误:SQL Server 不支持发布

在将 SQL Server Express 作为源终端节点时,会生成以下错误:

RetCode: SQL_ERROR SqlState: HY000 NativeError: 21106 Message: This edition of SQL Server does not support publications.

AWS DMS 当前不支持将 SQL Server Express 作为源或目标。

更改未显示在目标中

AWS DMS 要求源 SQL Server 数据库处于“FULL”或“BULK LOGGED”数据恢复模式中以便一致地捕获更改。不支持“SIMPLE”模式。

SIMPLE 恢复模式记录允许用户恢复其数据库所需的最少信息。在发生检查点操作时,将自动截断所有非活动日志条目。仍将记录所有操作,但在发生检查点操作时将自动截断日志,这意味着,可以覆盖可重复使用的和较旧的日志条目。在覆盖日志条目时,无法捕获更改,这也是 AWS DMS 不支持 SIMPLE 数据恢复模式的原因。有关将 SQL Server 作为源所需的其他先决条件的信息,请参阅将 Microsoft SQL Server 数据库作为 AWS DMS 源

解决 Amazon Redshift 特定的问题

以下问题是将 AWS DMS 用于 Amazon Redshift 数据库时所特有的。

正在加载到与 AWS DMS 复制实例不同的其他区域内的 Amazon Redshift 集群中

无法执行此操作。AWS DMS 要求 AWS DMS 复制实例和 Redshift 集群位于同一区域内。

错误:关系“attrep_apply_exceptions”已存在

在将 Redshift 终端节点指定为 PostgreSQL 终端节点时,通常会出现错误“关系‘awsdms_apply_exceptions’已存在”。要纠正该问题,请修改终端节点并将目标引擎更改为“redshift”。

其名称以“awsdms_changes”开头的表出错

当同时运行两个尝试将数据加载到同一个 Amazon Redshift 群集中的任务时,通常会出现与其名称以“awsdms_changes”开头的表相关的错误消息。由于临时表的命名方式,当更新同一表时,并发任务会发生冲突。

查看群集中具有诸如 dms.awsdms_changes000000000XXXX 这样的名称的表

在从存储在 S3 中的文件加载数据时,AWS DMS 创建临时表。这些临时表的名称的前缀为“dms.awsdms_changes”。 这些表是必需的,以便 AWS DMS 能够在首次加载数据时以及在将数据放置到最终目标表之前存储数据。

使用 Amazon Redshift 所需的权限

要将 AWS DMS 用于 Amazon Redshift,您用来访问 Amazon Redshift 的用户账户必须具有以下权限:

  • CRUD (选择、插入、更新、删除)

  • 批量加载

  • 创建、更改、删除 (如果任务的定义要求)

要查看有关将 Amazon Redshift 作为目标的所有先决条件,请参阅将 Amazon Redshift 数据库作为 AWS Database Migration Service 目标

解决 Amazon Aurora MySQL 特定的问题

以下问题是将 AWS DMS 用于 Amazon Aurora MySQL 数据库时所特有的。

错误:CHARACTER SET UTF8 字段由“,”终止,包含在“"”中,行由“\n”终止

如果将 Amazon Aurora MySQL 作为目标并在日志中看到类似下面的错误,这通常表示您将 ANSI_QUOTES 作为 SQL_MODE 参数的一部分。将 ANSI_QUOTES 作为 SQL_MODE 参数的一部分会导致像处理引号一样处理双引号,并且会导致您运行任务时出现问题。要纠正此错误,请从 SQL_MODE 参数中删除 ANSI_QUOTES。

2016-11-02T14:23:48 [TARGET_LOAD ]E: Load data sql statement. load data local infile "/rdsdbdata/data/tasks/7XO4FJHCVON7TYTLQ6RX3CQHDU/data_files/4/LOAD000001DF.csv" into table `VOSPUSER`.`SANDBOX_SRC_FILE` CHARACTER SET UTF8 fields terminated by ',' enclosed by '"' lines terminated by '\n'( `SANDBOX_SRC_FILE_ID`,`SANDBOX_ID`, `FILENAME`,`LOCAL_PATH`,`LINES_OF_CODE`,`INSERT_TS`,`MODIFIED_TS`,`MODIFIED_BY`, `RECORD_VER`,`REF_GUID`,`PLATFORM_GENERATED`,`ANALYSIS_TYPE`,`SANITIZED`,`DYN_TYPE`, `CRAWL_STATUS`,`ORIG_EXEC_UNIT_VER_ID` ) ; (provider_syntax_manager.c:2561)