将 Oracle 转换为 Amazon RDS for Oracle - AWS Schema Conversion Tool

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

将 Oracle 转换为 Amazon RDS for Oracle

将 Oracle 架构和代码迁移到 Amazon RDS for Oracle 时要考虑的一些事项:

  • AWS SCT 可以将目录对象添加到对象树中。目录对象是逻辑结构,每个结构代表服务器文件系统上的物理目录。可以使用包含包(如 DBMS_LOB、UTL_FILE、DBMS_FILE_TRANSFER、DATAPUMP 实用程序等)的目录对象。

  • AWS SCT 支持将 Oracle 表空间转换为 Amazon RDS for Oracle 数据库实例。Oracle 将数据存储在表空间中 (按逻辑) 和与相应表空间关联的数据文件中 (以物理方式)。在 Oracle 中,可以创建包含数据文件名的表空间。Amazon RDS 仅支持数据文件、日志文件和控制文件的 Oracle Managed Files(OMF)。AWS SCT 在转换过程中创建所需的数据文件。

  • AWS SCT 可以转换服务器级别的角色和权限。Oracle 数据库引擎采用了基于角色的安全机制。角色是可授予用户或从用户撤消的特权的集合。Amazon RDS 中名为 DBA 的预定义角色一般允许 Oracle 数据库引擎上的所有管理特权。对于使用 Oracle 引擎的 Amazon RDS 数据库实例,DBA 角色没有以下权限:

    • 更改数据库

    • 更改系统

    • 创建任何目录

    • 授予任何权限

    • 授予任何角色

    • 创建外部任务

    您可以向 Amazon RDS for Oracle 用户角色授予所有其他权限,包括高级筛选和列权限。

  • AWS SCT 支持将 Oracle 作业转换为可在 Amazon RDS for Oracle 中运行的作业。转换存在一些限制,其中包括:

    • 不支持可执行文件作业。

    • 不支持使用 ANYDATA 数据类型作为参数的计划作业。

  • Oracle Real Application Clusters (RAC) One Node 是在 Oracle Database 11g Release 2 中引入的 Oracle Database Enterprise Edition 的选件。Amazon RDS for Oracle 不支持 RAC 功能。为了实现高可用性,可使用 Amazon RDS 多可用区。

    在多可用区部署中,Amazon RDS 会自动在不同可用区中配置和维护一个同步备用副本。主数据库实例可以跨可用区同步复制到备用副本。此功能提供数据冗余,消除 I/O 冻结,并在系统备份期间将延迟峰值降至最小。

  • Oracle Spatial 提供了一个 SQL 架构和一些功能,可帮助在 Oracle 数据库中存储、检索、更新和查询空间数据集合。Oracle Locator 提供支持基于 Internet 和无线服务的应用程序与基于合作伙伴的 GIS 解决方案通常所需的功能。Oracle Locator 是 Oracle Spatial 的有限子集。

    要使用 Oracle Spatial 和 Oracle Locator 功能,可以将 SPATIAL 选项或 LOCATOR 选项(互斥)添加到数据库实例的选项组。

    在 Amazon RDS for Oracle 数据库实例上使用 Oracle Spatial 和 Oracle Locator 有一些先决条件:

    • 该实例应使用 Oracle 企业版 12.1.0.2.v6 版或更高版本,或者 11.2.0.4.v10 版或更高版本。

    • 该实例应在 Virtual Private Cloud (VPC) 内。

    • 该实例应该是可支持 Oracle 功能的数据库实例类。例如,db.m1.small、db.t1.micro、db.t2.micro 或 db.t2.small 数据库实例类不支持 Oracle Spatial。有关更多信息,请参阅 Oracle 的数据库实例类支持

    • 实例必须已启用“Auto Minor Version Upgrade (自动次要版本升级)”选项。如果存在 CVSS 评分为 9+ 的安全漏洞或其他公布的安全漏洞,则 Amazon RDS 会将数据库实例更新为最新的 Oracle PSU。有关更多信息,请参阅

      适用于 Oracle 数据库实例的设置

    • 如果数据库实例为 11.2.0.4.v10 版或更高版本,则必须安装 XMLDB 选项。有关更多信息,请参阅

      Oracle XML 数据库

    • 您应该拥有 Oracle 中的 Oracle Spatial 许可证。有关更多信息,请参阅 Oracle 文档中的 Oracle Spatial 和图表

  • Data Guard 随 Oracle Database Enterprise Edition 提供。为了实现高可用性,可使用 Amazon RDS 多可用区功能。

    在多可用区部署中,Amazon RDS 会自动在不同可用区中配置和维护一个同步备用副本。主数据库实例可以跨可用区同步复制到备用副本。此功能提供数据冗余,消除 I/O 冻结,并在系统备份期间将延迟峰值降至最小。

  • AWS SCT 支持在迁移至 Amazon RDS for Oracle 时转换 Oracle DBMS_SCHEDULER 对象。AWS SCT 评估报告会指明是否可以转换计划对象。有关将计划对象用于 Amazon RDS 的详细信息,请参阅 Amazon RDS 文档

  • 对于 Oracle 到 Amazon RDS for Oracle 转换,支持数据库链接。数据库链接是一个数据库中的架构对象,允许您访问另一个数据库上的对象。另一个数据库不需要是 Oracle 数据库。但是,要访问非 Oracle 数据库,您必须使用 Oracle 异构服务。

    一旦您创建数据库链接,便可以使用 SQL 语句中的链接来引用其他数据库中的表、视图和 PL/SQL 对象。要使用数据库链接,请将 @dblink 附加到表、视图或 PL/SQL 对象名称。您可以使用 SELECT 语句查询其他数据库中的表或视图。有关使用 Oracle 数据库链接的更多信息,请参阅 Oracle 文档

    有关将数据库链接与 Amazon RDS 一起使用的更多信息,请参阅 Amazon RDS 文档

  • AWS SCT 评估报告提供了转换的服务器指标。这些有关 Oracle 实例的指标包括:

    • 目标数据库实例的计算和内存容量。

    • 不支持的 Oracle 功能。例如,Amazon RDS 不支持的 Real Application Clusters。

    • 磁盘读写负载

    • 平均总磁盘吞吐量

    • 服务器信息,如服务器名称、操作系统、主机名和字符集。

将 Oracle 用作目标的权限

要迁移到 Amazon RDS for Oracle,请创建特权数据库用户。您可以使用以下代码示例:

CREATE USER user_name IDENTIFIED BY your_password; -- System privileges GRANT DROP ANY CUBE BUILD PROCESS TO user_name; GRANT ALTER ANY CUBE TO user_name; GRANT CREATE ANY CUBE DIMENSION TO user_name; GRANT CREATE ANY ASSEMBLY TO user_name; GRANT ALTER ANY RULE TO user_name; GRANT SELECT ANY DICTIONARY TO user_name; GRANT ALTER ANY DIMENSION TO user_name; GRANT CREATE ANY DIMENSION TO user_name; GRANT ALTER ANY TYPE TO user_name; GRANT DROP ANY TRIGGER TO user_name; GRANT CREATE ANY VIEW TO user_name; GRANT ALTER ANY CUBE BUILD PROCESS TO user_name; GRANT CREATE ANY CREDENTIAL TO user_name; GRANT DROP ANY CUBE DIMENSION TO user_name; GRANT DROP ANY ASSEMBLY TO user_name; GRANT DROP ANY PROCEDURE TO user_name; GRANT ALTER ANY PROCEDURE TO user_name; GRANT ALTER ANY SQL TRANSLATION PROFILE TO user_name; GRANT DROP ANY MEASURE FOLDER TO user_name; GRANT CREATE ANY MEASURE FOLDER TO user_name; GRANT DROP ANY CUBE TO user_name; GRANT DROP ANY MINING MODEL TO user_name; GRANT CREATE ANY MINING MODEL TO user_name; GRANT DROP ANY EDITION TO user_name; GRANT CREATE ANY EVALUATION CONTEXT TO user_name; GRANT DROP ANY DIMENSION TO user_name; GRANT ALTER ANY INDEXTYPE TO user_name; GRANT DROP ANY TYPE TO user_name; GRANT CREATE ANY PROCEDURE TO user_name; GRANT CREATE ANY SQL TRANSLATION PROFILE TO user_name; GRANT CREATE ANY CUBE TO user_name; GRANT COMMENT ANY MINING MODEL TO user_name; GRANT ALTER ANY MINING MODEL TO user_name; GRANT DROP ANY SQL PROFILE TO user_name; GRANT CREATE ANY JOB TO user_name; GRANT DROP ANY EVALUATION CONTEXT TO user_name; GRANT ALTER ANY EVALUATION CONTEXT TO user_name; GRANT CREATE ANY INDEXTYPE TO user_name; GRANT CREATE ANY OPERATOR TO user_name; GRANT CREATE ANY TRIGGER TO user_name; GRANT DROP ANY ROLE TO user_name; GRANT DROP ANY SEQUENCE TO user_name; GRANT DROP ANY CLUSTER TO user_name; GRANT DROP ANY SQL TRANSLATION PROFILE TO user_name; GRANT ALTER ANY ASSEMBLY TO user_name; GRANT CREATE ANY RULE SET TO user_name; GRANT ALTER ANY OUTLINE TO user_name; GRANT UNDER ANY TYPE TO user_name; GRANT CREATE ANY TYPE TO user_name; GRANT DROP ANY MATERIALIZED VIEW TO user_name; GRANT ALTER ANY ROLE TO user_name; GRANT DROP ANY VIEW TO user_name; GRANT ALTER ANY INDEX TO user_name; GRANT COMMENT ANY TABLE TO user_name; GRANT CREATE ANY TABLE TO user_name; GRANT CREATE USER TO user_name; GRANT DROP ANY RULE SET TO user_name; GRANT CREATE ANY CONTEXT TO user_name; GRANT DROP ANY INDEXTYPE TO user_name; GRANT ALTER ANY OPERATOR TO user_name; GRANT CREATE ANY MATERIALIZED VIEW TO user_name; GRANT ALTER ANY SEQUENCE TO user_name; GRANT DROP ANY SYNONYM TO user_name; GRANT CREATE ANY SYNONYM TO user_name; GRANT DROP USER TO user_name; GRANT ALTER ANY MEASURE FOLDER TO user_name; GRANT ALTER ANY EDITION TO user_name; GRANT DROP ANY RULE TO user_name; GRANT CREATE ANY RULE TO user_name; GRANT ALTER ANY RULE SET TO user_name; GRANT CREATE ANY OUTLINE TO user_name; GRANT UNDER ANY TABLE TO user_name; GRANT UNDER ANY VIEW TO user_name; GRANT DROP ANY DIRECTORY TO user_name; GRANT ALTER ANY CLUSTER TO user_name; GRANT CREATE ANY CLUSTER TO user_name; GRANT ALTER ANY TABLE TO user_name; GRANT CREATE ANY CUBE BUILD PROCESS TO user_name; GRANT ALTER ANY CUBE DIMENSION TO user_name; GRANT CREATE ANY EDITION TO user_name; GRANT CREATE ANY SQL PROFILE TO user_name; GRANT ALTER ANY SQL PROFILE TO user_name; GRANT DROP ANY OUTLINE TO user_name; GRANT DROP ANY CONTEXT TO user_name; GRANT DROP ANY OPERATOR TO user_name; GRANT DROP ANY LIBRARY TO user_name; GRANT ALTER ANY LIBRARY TO user_name; GRANT CREATE ANY LIBRARY TO user_name; GRANT ALTER ANY MATERIALIZED VIEW TO user_name; GRANT ALTER ANY TRIGGER TO user_name; GRANT CREATE ANY SEQUENCE TO user_name; GRANT DROP ANY INDEX TO user_name; GRANT CREATE ANY INDEX TO user_name; GRANT DROP ANY TABLE TO user_name; GRANT SELECT_CATALOG_ROLE TO user_name; GRANT SELECT ANY SEQUENCE TO user_name; -- Database Links GRANT CREATE DATABASE LINK TO user_name; GRANT CREATE PUBLIC DATABASE LINK TO user_name; GRANT DROP PUBLIC DATABASE LINK TO user_name; -- Server Level Objects (directory) GRANT CREATE ANY DIRECTORY TO user_name; GRANT DROP ANY DIRECTORY TO user_name; -- (for RDS only) GRANT EXECUTE ON RDSADMIN.RDSADMIN_UTIL TO user_name; -- Server Level Objects (tablespace) GRANT CREATE TABLESPACE TO user_name; GRANT DROP TABLESPACE TO user_name; -- Server Level Objects (user roles) /* (grant source privileges with admin option or convert roles/privs as DBA) */ -- Queues grant execute on DBMS_AQADM to user_name; grant aq_administrator_role to user_name; -- for Materialized View Logs creation GRANT SELECT ANY TABLE TO user_name; -- Roles GRANT RESOURCE TO user_name; GRANT CONNECT TO user_name;

在前面的示例中,将 user_name 替换为用户名。然后,将 your_password 替换为安全密码。

将 Oracle 转换为 Amazon RDS for Oracle 的限制

将 Oracle 架构和代码迁移到 Amazon RDS for Oracle 时应考虑的一些限制:

  • Amazon RDS 中名为 DBA 的预定义角色一般允许 Oracle 数据库引擎上的所有管理特权。对于使用 Oracle 引擎的 Amazon RDS 数据库实例,DBA 角色没有以下权限:

    • 更改数据库

    • 更改系统

    • 创建任何目录

    • 授予任何权限

    • 授予任何角色

    • 创建外部任务

    可以向 Oracle RDS 用户角色授予所有其他特权。

  • Amazon RDS for Oracle 支持传统审核、使用 DBMS_FGA 包的精细审核以及 Oracle 的统一审核。

  • Amazon RDS for Oracle 不支持更改数据捕获 (CDC)。要在数据库迁移期间和迁移之后执行更改数据捕获,请使用 AWS Database Migration Service。