当源数据库中存在表时,如何排查 AWS DMS 任务的“ERROR: No tables were found at task initialization(ERROR:在任务初始化时未找到表)”错误?

1 分钟阅读
0

当我尝试使用 AWS Database Migration Service(AWS DMS)迁移数据时,我收到“ERROR: No tables were found at task initialization(ERROR:在任务初始化时未找到表)”错误。但是,表就在我的源数据库中。

简短描述

您可能会收到“No tables were found at task initialization(在任务初始化时未找到表)”错误的原因有两个:

  • AWS DMS 映射规则定义不正确。
  • 您没有获取源表所需的权限。

此错误的原因取决于您的配置和您使用的数据库引擎。要解决此问题,请按照您的应用场景的相关问题排查步骤进行操作。

解决方法

映射规则定义不正确

AWS DMS 支持用作源的某些数据库引擎是区分大小写的,例如 Oracle 或 DB2。因此,当您将 Oracle 或 DB2 用作 AWS DMS 的源时,您的表名称、视图名称和列名称必须使用大写形式。

相比之下,MySQL 和 PostgreSQL 等数据库引擎默认对所有对象使用小写形式。有关更多信息,请参阅使用源筛选条件

AWS DMS 映射规则和端点设置区分大小写,因为它们必须与各种源引擎配合使用。如果 AWS DMS 任务中的指定对象名称与源数据库名称不同,则该任务将失败。

要解决此问题,请验证以下几点:

1.    确保表存在于源中,并且在任务开始之前没有被删除。

2.    如果表存在于源中,请确保对象名称与源数据库名称完全匹配。

例如,当您将 Oracle 数据库作为源时,Oracle 使用以下示例对象名称:

  • 源数据库 SID:ORCL - 用它来设置 Oracle 源端点数据库名称。
  • 源数据库架构名称:ADMIN - 用它来选择映射规则。
  • 源数据库表名称:TEST - 用它来选择映射规则。

以下示例在将 Oracle 作为源的映射规则中使用小写的对象名称:

{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "admin",
        "table-name": "test"
      },
      "rule-action": "include",
      "filters": []
    }
  ]
}

由于 Oracle 要求使用大写的对象名称,因此在此示例中 AWS DMS 任务失败。

以下示例在将 Oracle 作为源的映射规则中使用大写的对象名称:

{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "ADMIN",
        "table-name": "TEST"
      },
      "rule-action": "include",
      "filters": []
    }
  ]
}

在此示例中,任务不会失败。

您没有获取源表所需的权限

确保您拥有从 AWS DMS 获取源表所需的权限。

如果您将 Oracle 用作源端点,请参阅将 Oracle 用作源端点时,AWS DMS 需要什么权限?

有关每个源数据库引擎权限的信息,请参阅数据迁移的源


相关信息

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

AWS 官方
AWS 官方已更新 1 年前