本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS DMS 将 Oracle 分区表迁移到 PostgreSQL
Amazon Web Services 的 Saurav Mishra 和 Eduardo Valentim
摘要
此模式描述如何使用不支持本机分区的 AWS Database Migration Service (AWS DMS) 加速将分区表从 Oracle 加载到 PostgreSQL。目标 PostgreSQL 数据库可以安装在亚马逊弹性计算云(亚马逊)上,也可以是适用于 PostgreSQL 的 EC2亚马逊关系数据库服务(亚马逊 RDS)或兼容亚马逊 Aurora PostgreSQL 的版本数据库实例。
分区表上传包括以下步骤:
- 创建类似于 Oracle 分区表的父表,但不包含任何分区。 
- 创建将从步骤 1 中创建的父表继承的子表。 
- 创建过程函数和触发器以处理父表中的插入。 
但是,由于每次插入都会触发触发器,因此使用 AWS DMS 的初始加载可能会非常慢。
为了加快从 Oracle 到 PostgreSQL 9.0 的初始加载速度,此模式为每个分区创建一个单独的 AWS DMS 任务并加载相应的子表。然后,您可以在割接期间创建触发器。
PostgreSQL 版本 10 支持本机分区。但是,在某些情况下,您可能会决定使用继承分区。有关更多信息,请参阅其他信息部分。
先决条件和限制
先决条件
- 一个有效的 Amazon Web Services account 
- 具有分区表的源 Oracle 数据库 
- AWS 上的 PostgreSQL 数据库 
产品版本
- PostgreSQL 9.0 
架构
源技术堆栈
- Oracle 中的分区表 
目标技术堆栈
- PostgreSQL 中的分区表(在 EC2亚马逊上、适用于 PostgreSQL 的亚马逊 RDS 或 Aurora PostgreSQL 上) 
目标架构

工具
- AWS Database Migration Service (AWS DMS) 可帮助您将数据存储迁移到 Amazon Web Services Cloud,或者在云和本地设置的组合之间迁移。 
操作说明
| Task | 描述 | 所需技能 | 
|---|---|---|
| 在 PostgreSQL 中创建表。 | 使用所需分区检查条件在 PostgreSQL 中创建父表和相应子表。 | 数据库管理员 | 
| 为每个分区创建 AWS DMS 任务。 | 在 AWS DMS 任务中包括分区的筛选条件。将分区映射至相应的 PostgreSQL 子表。 | 数据库管理员 | 
| 使用满载操作和更改数据捕获 (CDC) 运行 AWS DMS 任务。 | 确保将  | 数据库管理员 | 
| Task | 描述 | 所需技能 | 
|---|---|---|
| 停止复制任务。 | 在停止任务之前,请确认源和目标是否同步。 | 数据库管理员 | 
| 在父表创建触发器。 | 由于父表将接收所有插入和更新命令,因此创建一个触发器,根据分区条件将这些命令路由到相应的子表。 | 数据库管理员 | 
相关的资源
其他信息
尽管 PostgreSQL 版本 10 支持原生分区,但您可能决定在以下用例中使用继承分区:
- 分区强制执行一条规则,即所有分区必须具有与父分区相同的列集,但表继承支持子分区具有额外的列。 
- 表继承支持多重继承。 
- 声明式分区仅支持列表与范围分区。通过表继承,您可按需要划分数据。但是,如果约束排除不能有效地修剪分区,查询性能将会受到影响。 
- 使用声明性分区时,某些运算需要比使用表继承时更强的锁。例如,在分区表中添加分区或从分区表中删除分区需要 - ACCESS EXCLUSIVE锁定父表,而- SHARE UPDATE EXCLUSIVE锁足以进行常规继承。
当您使用单独作业分区时,如果存在任何 AWS DMS 验证问题,您还可以重新加载分区。为了获得更好的性能和复制控制,请在单独的复制实例上运行任务。