在 AWS DMS 中,迁移如何在内部发生?是否就像从源表中导出整个数据并导入到目标表中一样?还是像将表记录一一迁移到目标表?我是 aws dms 的新手,对那里的工作方式不太了解。
4 回答
AWS 在其文档和博客文章中发布了 DMS 的工作原理。这是我开始使用 DMS 时希望拥有的列表:
有关高级理解,请参阅:https ://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.html
一项任务可以包括三个主要阶段:
- 现有数据的全部加载
- 缓存更改的应用
- 持续复制
在完全加载迁移期间,将来自源的现有数据移动到目标,AWS DMS 将数据从源数据存储上的表加载到目标数据存储上的表。在完全加载过程中,对正在加载的表所做的任何更改都会缓存在复制服务器上;这些是缓存的更改。
...
当给定表的完全加载完成后,AWS DMS 会立即开始应用该表的缓存更改。加载所有表后,AWS DMS 开始收集更改作为正在进行的复制阶段的事务。在 AWS DMS 应用所有缓存的更改后,表在事务上是一致的。此时,AWS DMS 进入正在进行的复制阶段,将更改作为事务应用。
来自:https ://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Components.html
看标题:
- 复制任务
- 持续复制或变更数据捕获 (CDC)
要详细了解 DMS 在内部的工作原理,请通读 AWS 的以下博客:
当我第一次使用 DMS 时,我也有同样的问题。因此,我启用了 Cloudwatch 日志并创建了一项从 Oracle 到 Aurora Postgresql 的迁移任务。
- 第一个 DMS 任务在复制实例上运行,它连接到源和目标数据库。
- RI 然后连接到源数据库并根据选择规则识别表和列详细信息,因为它对源数据库和目标数据库具有很多特殊访问权限。
- 之后,它开始并行读取源表并创建
Select col1, col2, col3.. from
一种查询以从源中获取数据。 - 然后它根据表在 RI 上的临时位置写入文件,每个表 1 个文件,一次提交大约 10000 行。
- 当这一切发生时,另一个进程正在创建与目标数据库的连接并检查表是否已经存在,如果是,那么它会检查我们选择了哪个选项什么都不做或截断表等。基于此它会采取行动。
- 到目前为止,我们在 RI 上的文件中拥有来自 Source 表的数据,以及在 Target DB 上创建的连接和表。现在 RI 只是从 RI 临时位置读取文件记录并创建插入查询。
- 一旦最后一次提交成功,它就会从 RI 中删除临时文件。
- 一旦源表和目标表计数匹配,它会在一次性加载的情况下关闭连接。
- 如果正在进行更改,它会保持连接活动并读取源数据库中的重做日志或其他日志。然后按照上面提到的 CDC 相同的过程进行操作。
除了上面的答案,DMS 在下面使用 Attunity。有关于后者如何详细工作的公开文件。
这是一个文档,提供了有关 DMS 持续复制如何在内部工作的更多信息:https ://aws.amazon.com/blogs/database/introducing-ongoing-replication-from-amazon-rds-for-sql-server-using- aws-数据库-迁移服务/
它的短处是:
(遵循一些初始步骤)AWS DMS 不使用任何复制工件。当事务日志或事务日志备份中的所有必需信息都可用时,AWS DMS 使用 fn_dblog() 和 fn_dump_dblog() 函数使用日志序列号 (LSN) 直接从事务日志或事务日志备份中读取更改。