当我尝试使用 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 中的迁移任务问题