使用扩展将 Oracle 原生函数迁移到 PostgreSQL - AWS Prescriptive Guidance

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

使用扩展将 Oracle 原生函数迁移到 PostgreSQL

由 Pinesh Singal (AWS) 编写

环境:PoC 或试点

源:数据库:关系

目标:Amazon RDS PostgreSQL

R 类型:重构

工作负载:Oracle;开源

技术:迁移;数据库

Amazon Web Services:Amazon EC2;Amazon RDS

总结

此迁移模式通过修改 PostgreSQL () 原生内置代码和orafce扩展,为将适用于 Oracle 的亚马逊关系数据库服务 (Amazon RDS) 数据库实例迁移到亚马逊 RDS for PostgreSQL 或兼容 Amazon Aurora PostgreSQL 的aws_oracle_ext版本数据库提供了 step-by-step 指导。psql这将会节省处理时间。

该模式描述了一种离线手动迁移策略,对于具有大量事务的多 TB Oracle 源数据库,无需停机。

迁移过程使用具有 aws_oracle_extorafce扩展的 AWS Schema Conversion Tool (AWS SCT) 将 Amazon RDS for Oracle 数据库架构转换为 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 兼容数据库架构。然后,将代码手动更改为 PostgreSQL 支持的原生 psql内置代码。这是因为扩展调用会影响 PostgreSQL 数据库服务器上的代码处理,而且并非所有扩展代码都完全符合 PostgreSQL 代码或与 PostgreSQL 代码兼容。

这种模式主要侧重于使用 AWS SCT 以及扩展 aws_oracle_extorafce手动迁移 SQL 代码。您可以将已使用的扩展转换为原生 PostgreSQL (psql) 内置插件。然后,删除对扩展的所有引用,并相应地转换代码。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account 

  • 操作系统(Windows 或 Mac)或 Amazon EC2 实例(已启动并正在运行) 

  • Orafce

限制

并非所有使用 aws_oracle_extorafce扩展的 Oracle 函数都可以转换为原生 PostgreSQL 函数。它可能需要手动返工才能使用 PostgreSQL 库进行编译。

使用 AWS SCT 扩展的一个缺点是它在运行和获取结果方面的性能较慢。其成本可以从简单的 PostgreSQL EXPLAIN plan 计划(语句的执行计划)中理解,该计划涉及所有三个代码(aws_oracle_extorafcepsql默认)之间的 Oracle SYSDATE函数迁移到 PostgreSQL NOW()函数,如所附文档中的性能比较检查部分所述。

产品版本

  • 源:Amazon RDS for Oracle 数据库 10.2 及更高版本(适用于 10.x)、11g(11.2.0.3.v1 及更高版本)以及适用于企业版、标准版、标准版 1 的最高 12.2、18c 和 19c(及更高版本),和标准版 2

  • 目标:Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 兼容数据库 9.4 及更高版本(适用于 9.x)、10.x、11.x、12.x、13.x 和 14.x(及更高版本)

  • AWS SCT:最新版本(此模式已使用 1.0.632 进行了测试)

  • Orafce:最新版本(此模式已使用 3.9.0 进行了测试)

架构

源技术堆栈

  • 版本 12.1.0.2.v18 的 Amazon RDS for Oracle 数据库实例

目标技术堆栈

  • 版本 11.5 的“Amazon RDS for PostgreSQL”或 Aurora PostgreSQL 兼容数据库实例

数据库迁移架构

下图展示了源 Oracle 数据库和目标 PostgreSQL 数据库之间的数据库迁移架构。该架构涉及 AWS Cloud、虚拟私有云(VPC)、可用区、私有子网、Amazon RDS for Oracle 数据库、AWS SCT、Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 兼容数据库、Oracle 扩展(aws_oracle_extorafce)以及结构化查询语言(SQL)文件。

以下列表介绍了该过程。
  1. 启动 Amazon RDS for Oracle 数据库实例(源数据库)。

  2. 使用 AWS SCT 以及 aws_oracle_extorafce扩展包将源代码从 Oracle 转换为 PostreSQL。

  3. 转换生成 PostgreSQL 支持的已迁移的 .sql 文件。

  4. 手动将未转换的 Oracle 扩展代码转换为 PostgreSQL (psql) 代码。

  5. 手动转换生成 PostgreSQL 支持的已转换的 .sql 文件。

  6. 在 Amazon RDS for PostgreSQL 数据库实例(目标数据库)上运行这些.sql 文件。

工具

工具

Amazon Web Services

  • AWS SCT - AWS Schema Conversion Tool (AWS SCT) 可将您的现有数据库架构从一个数据库引擎转换为另一个数据库引擎。您可以转换关系型联机事务处理(OLTP)模式或数据仓库模式。转换后的架构适用于 Amazon RDS for MySQL 数据库实例、Amazon Aurora 数据库集群、 Amazon RDS for PostgreSQL 数据库实例或 Amazon Redshift 集群。转换后的架构也可用于 Amazon EC2 实例上的数据库或作为数据存储在 Amazon S3 存储桶中。

    AWS SCT 提供基于项目的用户界面,以便将您的源数据库的数据库架构自动转换为兼容目标 Amazon RDS 实例的格式。 

    您可以使用 AWS SCT 从 Oracle 源数据库迁移到前面列出的任何目标。使用 AWS SCT,您可以导出源数据库对象定义,例如架构、视图、存储过程和函数。 

    您可以使用 AWS SCT 将数据从 Oracle 转换到 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 兼容版。 

    在此模式中,您使用 AWS SCT 使用扩展 aws_oracle_extorafce将 Oracle 代码转换并迁移到 PostgreSQL,并手动将扩展代码迁移到 psql默认代码或原生内置代码。

  • AWS SCT 扩展包是一个附加模块,用于模拟源数据库中存在的特定函数(将对象转换为目标数据库时需要)。您需要先转换数据库架构,然后才能安装 AWS SCT 扩展包。

    转换数据库或数据仓库架构时,AWS SCT 会向您的目标数据库添加一个额外的架构。该架构用于实现将转换后的架构写入到目标数据库时必需的源数据库的 SQL 系统功能。这个额外的架构称为扩展包架构。

    OLTP 数据库的扩展包架构按照源数据库命名。对于 Oracle 数据库,扩展包架构为 AWS_ORACLE_EXT

其他工具

  • Orafce — Oracce 是一个实现 Oracle 兼容函数、数据类型和包的模块。它是一个具有伯克利源代码分发 (BSD) 许可证的开源工具,因此任何人都可以使用它。orafce 模块对于从 Oracle 迁移到 PostgreSQL 很有用,因为它在 PostgreSQL 中实现了许多 Oracle 函数。

代码

有关为避免使用 AWS SCT 扩展代码而从 Oracle 迁移到 PostgreSQL 的所有常用代码和迁移代码的列表,请参阅随附的文档。

操作说明

任务描述所需技能

创建 Oracle 数据库实例。

从 Amazon RDS 控制台创建 Amazon RDS for Oracle 或 Aurora PostgreSQL 兼容的数据库实例。

常规 AWS、数据库管理员

配置安全组。

配置入站和出站安全组。

常规 AWS

创建数据库。

创建包含所需用户和架构的 Oracle 数据库。

常规 AWS、数据库管理员

创建对象。

创建对象并在架构中插入数据。

数据库管理员
任务描述所需技能

创建 PostgreSQL 数据库实例。

从 Amazon RDS 控制台创建 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 数据库实例。

常规 AWS、数据库管理员

配置安全组。

配置入站和出站安全组。

常规 AWS

创建数据库。

创建包含所需用户和架构的 PostgreSQL 数据库。

常规 AWS、数据库管理员

验证扩展。

确保 aws_oracle_extorafce已在 PostgreSQL 数据库中正确安装和配置。

数据库管理员

验证 PostgreSQL 数据库是否可用。

确保 PostgreSQL 数据库已启动并正在运行。

数据库管理员
任务描述所需技能

安装 AWS SCT。

安装 AWS SCT 的最新版本。

数据库管理员

配置 AWS SCT。

使用适用于 Oracle (ojdbc8.jar) 和 PostgreSQL (postgresql-42.2.5.jar) 的 Java 数据库连接 (JDBC) 驱动程序配置 AWS SCT。

数据库管理员

启用 AWS SCT 扩展包或模板。

在 AWS SCT 项目设置下,使用 Oracle 数据库架构的 aws_oracle_extorafce扩展启用内置函数实现。

数据库管理员

转换架构。

在 AWS SCT 中,选择转换架构将架构从 Oracle 转换为 PostgreSQL 并生成 .sql 文件。

数据库管理员
任务描述所需技能

手动转换代码。

手动将每一行支持扩展的代码转换为 psql默认内置代码,详见所附文档。例如,将 AWS_ORACLE_EXT.SYSDATE()ORACLE.SYSDATE()更改为 NOW()

数据库管理员

验证代码

(可选)通过在 PostgreSQL 数据库中临时运行每行代码来验证它。

数据库管理员

在 PostgreSQL 数据库中创建对象。

要在 PostgreSQL 数据库中创建对象,请运行由 AWS SCT 生成并在前两个步骤中修改过的 .sql 文件。

数据库管理员

相关的资源

其他信息

有关更多信息,请按照随附文档中的详细命令(包含语法和示例)手动转换代码。

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip