AWS DMS是如何内部工作的

3

在AWS DMS中,迁移是如何进行的?是像从源表导出整个数据并导入到目标表一样吗?还是逐条迁移表记录到目标表中?我对AWS DMS很陌生,不太清楚其中的工作原理。

4个回答

2
AWS在他们的文档和博客文章中发布了DMS的工作原理。这是我刚开始使用DMS时希望拥有的列表:
要了解高级别的内容,请参见:https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.html 一个任务包含三个主要阶段: 1. 现有数据的完全加载 2. 缓存更改的应用 3. 持续复制
在完整加载迁移期间,从源数据存储到目标数据存储,AWS DMS会将数据从源表加载到目标表。在完整加载正在进行时,对正在加载的表进行的任何更改都会被缓存在复制服务器上;这些是缓存更改。
当给定表的完整加载完成后,AWS DMS立即开始应用该表的缓存更改。当所有表都已加载时,AWS DMS开始收集事务作为持续复制阶段的更改。在AWS DMS应用所有缓存更改之后,表是事务一致的。此时,AWS DMS转移到持续复制阶段,将更改作为事务应用。
来自:https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Components.html 看一下标题: 1. 复制任务 2. 持续复制或更改数据捕获(CDC)
要详细了解DMS内部工作原理,请阅读AWS的以下博客:
1. 调试AWS DMS迁移:当事情出错时该怎么做(第1部分) 2. 调试AWS DMS迁移:当事情出错时该怎么做(第2部分) 3. 调试AWS DMS迁移:当事情出错时该怎么做?(第3部分) 最后,通过以下网址查看与您的源数据库和目标数据库相关的博客:https://aws.amazon.com/blogs/database/category/migration/aws-database-migration-service-migration/

JimmyL,在进行复制过程中,是否有可能捕获每次复制到目标表的行数? - Pand005

1

这里有一份文件,提供了有关DMS Ongoing Replication内部工作原理的更多信息:https://aws.amazon.com/blogs/database/introducing-ongoing-replication-from-amazon-rds-for-sql-server-using-aws-database-migration-service/

简而言之:

(在进行一些初始步骤后)AWS DMS不使用任何复制工件。当事务日志或事务日志备份中存在所有所需信息时,AWS DMS使用fn_dblog()和fn_dump_dblog()函数使用日志序列号(LSN)直接从事务日志或事务日志备份中读取更改。


1
当我第一次使用DMS时,也有同样的问题。因此,我启用了Cloudwatch日志,并从Oracle迁移到Aurora Postgresql创建了一个迁移任务。
  • 首先DMS任务在复制实例上运行,并连接到源数据库和目标数据库。
  • 然后RI连接到源数据库,并根据选择规则识别表和列详细信息,因为它在源数据库和目标数据库上有很多特殊访问权限。
  • 之后,它开始并行读取源表,并创建Select col1, col2, col3.. from类型的查询以从源获取数据。
  • 然后,它基于表在RI上的临时位置写入文件,每个表一个文件,每次提交大约10000行。
  • 当所有这些都在发生时,另一个进程正在创建到目标数据库的连接,并检查表是否已经存在,如果是,则检查我们选择的哪个选项,如不执行任何操作或截断表等。根据此采取行动。
  • 到目前为止,我们已经在RI上的文件中从源表中获取了数据,并在目标数据库上创建了连接和表。现在RI只需从RI临时位置读取文件记录并创建插入查询。
  • 一旦最后提交成功,它就会从RI中删除临时文件。
  • 一旦源表和目标表计数匹配,它就会在一次性加载的情况下关闭连接。
  • 在进行更改的情况下,它会保持连接处于活动状态,并读取源数据库中的重做日志或其他日志。然后按照上述CDC相同的过程进行。

0
除了以上答案外,DMS 在底层使用 Attunity。有关后者详细工作方式的公共文档可供参考。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接