使用 AWS DMS 任务可以迁移哪些对象?

上次更新日期:2022 年 7 月 25 日

我有一个 AWS Database Migration Service (AWS DMS) 任务未迁移所有数据库架构对象。AWS DMS 任务会迁移哪些对象,如何迁移其余的对象?

简短描述

如果您的 AWS DMS 任务没有迁移对象,可能是因为 AWS DMS 任务不迁移这种类型的对象。AWS DMS 会创建许多对象,例如表和主键,但不会创建从源迁移数据时不需要的对象。AWS DMS 不创建的一些对象示例包括二级索引、数据默认值和非主键约束

有关 AWS DMS 创建的对象的更多信息,请参阅排查 AWS Database Migration Service 中的迁移任务问题

要迁移 AWS DMS 未迁移的其余对象,请使用以下方法之一:

  • 对于同构迁移(在同一引擎类型的两个数据库之间),请使用引擎的本机工具迁移架构,以便导出和导入架构本身,而不带任何数据。
  • 对于异构迁移(在使用不同引擎类型的两个数据库之间),请使用 AWS Schema Conversion Tool (AWS SCT) 生成完整的目标架构。

解决方法

检查对象是否由 AWS DMS 任务迁移

首先,使用以下准则检查对象是否由 AWS DMS 任务迁移:

  • AWS DMS 任务会在目标上创建表,以及主键约束和索引。
  • 如果不存在主键,则任务将创建唯一键(如果存在于源表中)。
  • 如果源表上存在非空约束,则 AWS DMS 任务将在目标表上创建非空约束。这不包括大型对象 (LOB) 列。如果 AWS DMS 创建了目标表,则默认情况下会将 LOB 列设置为可为空。有关更多信息,请参阅迁移大型二进制对象 (LOB)
  • 如果源表具有自动增量列,则不会迁移自动增量属性。
  • AWS DMS 任务不会复制其他特定于表的属性,如外键约束、检查、数据默认值和注释。
  • AWS DMS 任务不会迁移二级索引、视图、过程、函数、包和触发器等数据库对象。请单独迁移这些对象。

使用引擎的本机工具迁移对象(同构迁移)

对于同构数据库迁移,请使用本机工具导出架构元数据,但不导出数据。然后,将此仅元数据转储导入目标数据库以创建数据库对象,不带任何数据。然后,运行 AWS DMS 任务,将 TargetTablePrepMode 任务设置为 TRUNCATE_BEFORE_LOAD。这意味着任务不会在目标上删除和重新创建表。

Oracle

要使用 Oracle 数据库迁移对象,请使用导出数据泵实用程序 (expdp) 获取仅元数据转储。使用 CONTENT=METADATA_ONLY 参数,数据泵实用程序将仅卸载数据库对象定义。该实用程序不会卸载任何表行数据。

1.    要获取仅元数据转储,请创建参数文件以导出架构:

$> cat export_sample_user.par 
userid=DMS_USER/password@SOURCE_DB
directory=DATA_PUMP_DIR
logfile=export_dms_sample_user_metadata.log
dumpfile=export_dms_sample_user_metadata_%U.dmp
schemas=DMS_SAMPLE
CONTENT=METADATA_ONLY

2    使用 expdp 实用程序运行导出:

expdp parfile=export_sample_user.par

3.    在源数据库的 DATA_PUMP_DIR 中创建转储文件后,将其复制到目标 Oracle 数据库的 DATA_PUMP_DIR。要在目标 Oracle 数据库上创建对象,请运行导入数据泵实用程序 (impdp) 来导入元数据:

impdp admin@TARGET_DB directory=DATA_PUMP_DIR logfile=import.log dumpfile=export_dms_sample_user_metadata_%U.dmp

SQL Server

要使用 SQL Server 迁移对象,请为数据库架构生成 SQL 脚本:

  1. 使用 SQL Server Management Studio (SSMS) 登录到源数据库。
  2. 右键单击要为其生成脚本的数据库,选择 Tasks(任务),然后选择 Generate Scripts(生成脚本)。
  3. Select specific database objects(选择特定数据库对象)下,选择要使用的表、视图和任何其他对象,然后选择 Next(下一步)。
  4. 选择 Advanced(高级)按钮,然后选择要编写脚本的数据类型。
  5. 如果要获取二级索引的 SQL,请将 Script indexes(脚本索引)设置为 true。默认情况下,脚本索引设置为 false。
  6. 选择保存脚本的方式。例如,在磁盘上创建 SQL 文件,将 SQL 复制到新的查询窗口,或将脚本复制到剪贴板。
  7. 选择 Next(下一步)。
  8. 再次选择 Next(下一步),然后选择 Finish(完成)。

要在目标数据库上创建对象,请运行完成这些步骤后生成的 SQL 脚本。

MySQL

要使用 MySQL 迁移对象,请使用 mysqldump 实用程序生成仅包含架构元数据的转储文件。--no-data 选项会告诉 mysqldump 不要转储表数据,因此转储文件中的结果只包含创建表的语句。对于仅定义转储,请添加 --routines--events 选项以包括存储的例程和事件定义。

示例:

mysqldump --no-data --routines --events -h SOURCE_DB_SERVER_NAME -u DMS_USER -p SOURCE_DB > path_to_dump_file.sql

要在目标数据库上创建对象,请运行在运行上一个命令后生成的 SQL 脚本。

PostgreSQL

要使用 PostgreSQL 数据库迁移对象,请使用 pg_dump 实用程序生成仅包含架构元数据的转储文件。-s--schema-only 选项转储对象定义(架构),而不是数据。

示例:

pg_dump --host SOURCE_DB_SERVER_NAME --port 5432 --username DMS_USER --schema-only --verbose SOURCE_DB > path_to_dump_file.sql

要在目标数据库上创建对象,请运行在运行上一个命令后生成的 SQL 脚本。

使用 AWS Schema Conversion Tool (AWS SCT) 迁移对象

使用 AWS SCT 将现有的数据库架构从一个数据库引擎转换和迁移到另一个数据库引擎。或者,使用 AWS SCT 将现有的本地数据库架构复制到运行相同引擎的 Amazon Relational Database Service (Amazon RDS) DB 实例。

要转换数据库架构,请执行以下步骤:

  1. 在 AWS SCT 中创建迁移规则
  2. 使用 AWS SCT 转换架构
  3. 在 AWS SCT 中保存并应用转换后的架构

有关更多信息,请参阅使用 AWS SCT 转换数据库架构


这篇文章对您有帮助吗?


您是否需要账单或技术支持?