RDS使用 Postgre SQL 或亚马逊 Aurora Postgre 从 Oracle 迁移到亚马逊 SQL AWS Schema Conversion Tool - AWS Schema Conversion Tool

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

RDS使用 Postgre SQL 或亚马逊 Aurora Postgre 从 Oracle 迁移到亚马逊 SQL AWS Schema Conversion Tool

当你将 Oracle 数据库转换为 Postgre SQL 或 Amazon Aurora Postgre 的数据库时SQL,请注意以下几点。RDS

将 Oracle 系统对象转换为 Postgre 时SQL, AWS SCT 会执行如下表所示的转换。

Oracle 系统对象 描述 转换的 Postgre 对象 SQL
V$ VERSION 在 Oracle 数据库中显示核心库组件的版本号 aws_oracle_ext.v$version
V$ INSTANCE 显示当前实例状态的视图。 aws_oracle_ext.v$instance

你可以使用 AWS SCT 将 Oracle SQL *Plus 文件转换为 psql,psql 是 Postgre 基于终端的前端。SQL有关更多信息,请参阅 SQL使用转换应用程序 AWS SCT

Postgre SQL 作为目标数据库的权限

要使用 Postgre SQL 作为目标, AWS SCT 需要CREATE ON DATABASE权限。确保为每个目标 Postgre SQL 数据库授予此权限。

要使用转换后的公共同义词,请将数据库的默认搜索路径更改为 "$user", public_synonyms, public

您可以使用以下代码示例创建数据库用户并授予权限。

CREATE ROLE user_name LOGIN PASSWORD 'your_password'; GRANT CREATE ON DATABASE db_name TO user_name; ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;

在前面的示例中,替换 user_name 用你的用户名。然后,替换 db_name 使用目标数据库的名称。最后,替换 your_password 使用安全的密码。

要使用 Amazon RDS for Postgre SQL 作为目标, AWS SCT 需要rds_superuser权限。

在 Postgre 中SQL,只有架构所有者或架构superuser才能删除架构。即使架构的所有者并不拥有架构的某些对象,该所有者也可以删除该架构及其包含的所有对象。

当你使用不同的用户转换不同的架构并将其应用到目标数据库时,当无法删除架构时,你 AWS SCT 可能会收到一条错误消息。要避免出现此错误消息,请使用 superuser 角色。

甲骨文到 Postgre 的SQL转换设置

要编辑 Oracle 到 Postgre 的SQL转换设置 AWS SCT,请选择中的设置,然后选择转换设置。从上方的列表中选择 Oracle,然后选择 Or acle — Postg SQL re。 AWS SCT 显示了 Oracle 到 Postgre SQL 转换的所有可用设置。

中的 Oracle 到 Postgre 的SQL转换设置 AWS SCT 包括以下各项的选项:

  • 限制转换后的代码中操作项的注释数量。

    对于在转换后的代码中为所选严重性及更高的措施项添加注释,请选择措施项的严重性。 AWS SCT 在转换后的代码中为选定严重性及更高的措施项添加注释。

    例如,要最大限度地减少转换后的代码中的注释数量,请选择仅错误。要在转换后的代码中包含所有操作项的注释,请选择所有消息

  • AWS SCT 允许在 Postgre 上将 Oracle 实例化视图转换为表或实例化视图。SQL对于实体化视图转换为,请选择如何转换源实体化视图。

  • 在 Oracle 源代码中包含带有 Postgre SQL 不支持的参数的TO_CHARTO_DATE、和TO_NUMBER函数时使用该代码。默认情况下, AWS SCT 会在转换后的代码中模拟这些参数的用法。

    当你的源 Oracle 代码仅包含 Postgre SQL 支持的参数时,你可以使用原生 Postgre SQL TO_CHAR TO_DATE、和TO_NUMBER函数。在这种情况下,转换后的代码运行更快。要仅包含这些参数,请选择以下值:

    • 函数 TO_ CHAR () 不使用 Oracle 特定的格式化字符串

    • 函数 TO_ DATE () 不使用 Oracle 特定的格式化字符串

    • 函数 TO_ NUMBER () 不使用 Oracle 特定的格式化字符串

  • 要解决源 Oracle 数据库在 NUMBER 数据类型的主键列或外键列中仅存储整数值的问题, AWS SCT 可以将这些列转换为 BIGINT 数据类型。这种方法可提高转换后的代码的性能。要采用这种方法,请选择 “将NUMBER主/外键列转换为主/外键列BIGINT”。请确保源在这些列中不包含浮点值,以避免数据丢失。

  • 跳过源代码中已停用的触发器和约束。为此,请选择忽略禁用的触发器和约束

  • 用于 AWS SCT 转换被称为 dynamic 的字符串变量SQL。数据库代码可以更改这些字符串变量的值。要确保 AWS SCT 始终转换此字符串变量的最新值,请选择 “转换在被调用例程中创建的动态SQL代码”。

  • 为了解决这个问题,Postgre SQL 版本 10 及更早版本不支持程序。如果你或你的用户不熟悉 Postgre 中的过程的使用SQL, AWS SCT 可以将 Oracle 过程转换为 Postg SQL re 函数。为此,请选择将过程转换为函数

  • 查看有关已发生操作项的更多信息。为此,您可以通过选择添加异常,提高迁移问题块严重性级别向扩展包中添加特定函数。然后,选择引发用户定义的异常的严重性级别。

  • 使用可能包含自动生成名称的约束的源 Oracle 数据库。如果源代码使用这些名称,请确保选择使用源的原始名称转换系统生成的约束名称。如果源代码使用这些约束,但未使用其名称,请清除此选项以提高转换速度。

  • 解决数据库和应用程序在不同的时区运行的问题。默认情况下,在转换后的代码中 AWS SCT 模拟时区。但是,当数据库和应用程序使用相同的时区时,您不需要这种模拟。在这种情况下,选择客户端时区与服务器端时区相匹配

  • 解决源数据库和目标数据库在不同的时区运行的问题。如果是这样,模拟 SYSDATE 内置 Oracle 函数的函数会返回与源函数不同的值。要确保源函数和目标函数返回的值相同,请选择为SYSDATE仿真设置默认时区

  • 在转换后的代码中使用 orafce 扩展中的函数。为此,在使用 orafce 实施中,选择要使用的函数。有关 orace 的更多信息,请参阅 or ace on。 GitHub

转换 Oracle 序列

AWS SCT 将序列从 Oracle 转换为 Postg SQL re。如果您使用序列维护完整性约束,请确保迁移序列的新值不会与现有值重叠。

使用源数据库中的最后一个值填充转换后的序列
  1. 以 Oracle 为源代码打开您的 AWS SCT 项目。

  2. 选择设置,然后选择转换设置

  3. 从上方的列表中选择 Oracle,然后选择 Or acle — Postg SQL re。 AWS SCT 显示了 Oracle 到 Postgre SQL 转换的所有可用设置。

  4. 选择使用源端生成的最后一个值填充转换后的序列

  5. 选择确定以保存设置并关闭转换设置对话框。

转换甲骨文 ROWID

在 Oracle 数据库中,ROWID伪列包含表行的地址。ROWID伪列是 Oracle 所独有的,因此在 Postgre 上将ROWID伪列 AWS SCT 转换为数据列。SQL通过使用此转换,您可以保留ROWID信息。

转换ROWID伪列时, AWS SCT 可以创建数据类型的数据列。bigint如果不存在主键,则 AWS SCT 将该ROWID列设置为主键。如果存在主键,则使用唯一约束 AWS SCT 设置该ROWID列。

如果您的源数据库代码包含无法使用数字数据类型运行的操作,则 AWS SCT 可以使用该数据类型创建character varying数据列。ROWID

为项目的 Oracle ROWID 创建数据列
  1. 以 Oracle 为源代码打开您的 AWS SCT 项目。

  2. 选择设置,然后选择转换设置

  3. 从上方的列表中选择 Oracle,然后选择 Or acle — Postg SQL re。 AWS SCT 显示了 Oracle 到 Postgre SQL 转换的所有可用设置。

  4. 对于生成行 ID,执行以下操作之一:

    • 选择生成为身份以创建数字数据列。

    • 选择生成为字符域类型以创建字符数据列。

  5. 选择确定以保存设置并关闭转换设置对话框。

转换甲骨文动态 SQL

Oracle 提供了两种实现动态的方法SQL:使用EXECUTEIMMEDIATE语句或在 DBMS _ SQL 包中调用过程。如果您的源 Oracle 数据库包含动态对象SQL,请使用 AWS SCT 将 Oracle 动态SQL语句转换为 Postg SQL re。

将 Oracle 动态转换为 Post SQL gre SQL
  1. 以 Oracle 为源代码打开您的 AWS SCT 项目。

  2. 在 Oracle 源树视图中选择使用动态SQL的数据库对象。

  3. 打开该对象的上下文 (右键单击) 菜单,然后选择 转换架构,并同意替换对象(如果存在)。以下屏幕截图显示了 Oracle 过程下方的动态转换过程SQL。

    动态SQL转换

转换 Oracle 分区

AWS SCT 目前支持以下分区方法:

  • Range

  • 列出

  • 多列范围

  • 哈希

  • 复合(列表-列表、范围-列表、列表-范围、列表-哈希、范围-哈希、哈希-哈希)