使用将 Oracle 分区表迁移到 Postgre SQL AWS DMS - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用将 Oracle 分区表迁移到 Postgre SQL AWS DMS

由 Saurav Mishra (AWS) 和 Eduardo Valentim () 创作 AWS

摘要

此模式描述了如何使用不支持本机分区的AWS数据库迁移服务 (AWSDMS) 加快将SQL分区表从 Oracle 加载到 Postgre 的速度。目标 Postgre SQL 数据库可以安装在亚马逊弹性计算云(亚马逊EC2)上,也可以是适用于 Postgre 的亚马逊关系数据库服务(亚马逊RDS)SQL或亚马逊 Aurora Postgre SQL 兼容版数据库实例。 

分区表上传包括以下步骤:

  1. 创建类似于 Oracle 分区表的父表,但不包含任何分区。

  2. 创建将从步骤 1 中创建的父表继承的子表。

  3. 创建过程函数和触发器以处理父表中的插入。

但是,由于每次插入都会触发触发器,因此使用的初始加载AWSDMS可能会非常慢。

为了加快从 Oracle 到 Postgre SQL 9.0 的初始加载速度,此模式为每个分区创建一个单独的AWSDMS任务并加载相应的子表。然后,您可以在割接期间创建触发器。 

Postgre SQL 版本 10 支持本机分区。但是,在某些情况下,您可能会决定使用继承分区。有关更多信息,请参阅其他信息部分。

先决条件和限制

先决条件

  • 一个活跃的AWS账户

  • 具有分区表的源 Oracle 数据库

  • 开启的 Postgre SQL 数据库 AWS

产品版本

  • Postgre 9.0 SQL

架构

源技术堆栈

  • Oracle 中的分区表

目标技术堆栈

  • Postgre 中的分区表SQL(亚马逊、EC2亚马RDS逊 Postgre SQL 或 Aurora Postgre)中的分区表 SQL

目标架构

Oracle 中的分区表数据移动到每个分区的AWSDMS任务中,然后移动到 Post SQL gre 中。

工具

操作说明

任务描述所需技能

在 Postgre SQL 中创建表格。

使用所需的分区检查条件在 Postgr SQL e 中创建父表和相应的子表。

DBA

为每个分区创建AWSDMS任务。

在AWSDMS任务中包括分区的筛选条件。将分区映射到相应的 Postgre SQL 子表。

DBA

使用满载运行AWSDMS任务并更改数据捕获 (CDC)。

确保将 StopTaskCachedChangesApplied 参数设置为 true,将 StopTaskCachedChangesNotApplied 参数设置为 false

DBA
任务描述所需技能

停止复制任务。

在停止任务之前,请确认源和目标是否同步。

DBA

在父表创建触发器。

由于父表将接收所有插入和更新命令,因此创建一个触发器,根据分区条件将这些命令路由到相应的子表。

DBA

相关资源

其他信息

尽管 Postgre SQL 版本 10 支持本机分区,但对于以下用例,您可能会决定使用继承的分区:

  • 分区强制执行一条规则,即所有分区必须具有与父分区相同的列集,但表继承支持子分区具有额外的列。

  • 表继承支持多重继承。

  • 声明式分区仅支持列表与范围分区。通过表继承,您可按需要划分数据。但是,如果约束排除不能有效地修剪分区,查询性能将会受到影响。

  • 使用声明性分区时,某些运算需要比使用表继承时更强的锁。例如,在分区表中添加分区或从分区表中删除分区需要 ACCESS EXCLUSIVE 锁定父表,而 SHARE UPDATE EXCLUSIVE 锁足以进行常规继承。

使用单独的作业分区时,如果存在任何AWSDMS验证问题,也可以重新加载分区。为了获得更好的性能和复制控制,请在单独的复制实例上运行任务。