

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

# 从 Oracle 数据库迁移到 Amazon RDS for Oracle AWS Schema Conversion Tool
<a name="CHAP_Source.Oracle.ToRDSOracle"></a>

将 Oracle 架构和代码迁移到 Amazon RDS for Oracle 时要考虑的一些事项：
+ AWS SCT 可以将目录对象添加到对象树中。*目录对象*是逻辑结构，每个结构代表服务器文件系统上的物理目录。可以使用包含包（如 DBMS\$1LOB、UTL\$1FILE、DBMS\$1FILE\$1TRANSFER、DATAPUMP 实用程序等）的目录对象。
+ AWS SCT 支持将 Oracle 表空间转换为 Amazon RDS for Oracle 数据库实例。Oracle 将数据存储在表空间中 (按逻辑) 和与相应表空间关联的数据文件中 (以物理方式)。在 Oracle 中，可以创建包含数据文件名的表空间。Amazon RDS 仅支持数据文件、日志文件和控制文件的 Oracle 托管文件 (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 的数据库实例类支持](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html#Oracle.Concepts.InstanceClasses)。
  + 实例必须已启用“Auto Minor Version Upgrade (自动次要版本升级)”选项。如果存在 CVSS 评分为 9\$1 的安全漏洞或其他公布的安全漏洞，则 Amazon RDS 会将数据库实例更新为最新的 Oracle PSU。有关更多信息，请参阅 

    [适用于 Oracle 数据库实例的设置](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ModifyInstance.Oracle.html#USER_ModifyInstance.Oracle.Settings)。
  + 如果数据库实例为 11.2.0.4.v10 版或更高版本，则必须安装 XMLDB 选项。有关更多信息，请参阅 

    [Oracle XML 数据库](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.XMLDB.html)。
  + 您应该拥有 Oracle 中的 Oracle Spatial 许可证。有关更多信息，请参阅 Oracle 文档中的 [Oracle Spatial 和图表](https://shop.oracle.com/apex/product?p1=OracleSpatialandGraph)。
+ Data Guard 随 Oracle Database Enterprise Edition 提供。为了实现高可用性，可使用 Amazon RDS 多可用区功能。

  在多可用区部署中，Amazon RDS 会自动在不同可用区中配置和维护一个同步备用副本。主数据库实例可以跨可用区同步复制到备用副本。此功能提供了数据冗余，消除了 I/O 冻结，并最大限度地减少了系统备份期间的延迟峰值。
+ AWS SCT 在迁移到适用于 Oracle 的 Amazon RDS 时，支持转换 Oracle DBMS\$1SCHEDULER 对象。 AWS SCT 评估报告指明是否可以转换计划对象。有关将计划对象用于 Amazon RDS 的详细信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.System.html#Appendix.Oracle.CommonDBATasks.ModifyScheduler)。
+ 对于 Oracle 到 Amazon RDS for Oracle 转换，支持数据库链接。数据库链接是一个数据库中的架构对象，允许您访问另一个数据库上的对象。另一个数据库不需要是 Oracle 数据库。但是，要访问非 Oracle 数据库，您必须使用 Oracle 异构服务。

  创建数据库链接后，可以使用 SQL 语句中的链接来引用其他数据库中的表、视图和 PL/SQL 对象。要使用数据库链接，请在表、视图或 PL/SQL 对象名称后面追加`@dblink`。您可以使用 SELECT 语句查询其他数据库中的表或视图。有关使用 Oracle 数据库链接的更多信息，请参阅 [Oracle 文档](https://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_concepts002.htm#ADMIN12083)。

  有关将数据库链接与 Amazon RDS 一起使用的更多信息，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.Database.html#Appendix.Oracle.CommonDBATasks.DBLinks)。
+  AWS SCT 评估报告提供了转化的服务器指标。这些有关 Oracle 实例的指标包括：
  + 目标数据库实例的计算和内存容量。
  + 不支持的 Oracle 功能。例如，Amazon RDS 不支持的 Real Application Clusters。
  + 磁盘读写负载
  + 平均总磁盘吞吐量
  + 服务器信息，如服务器名称、操作系统、主机名和字符集。

## 将 Oracle 用作目标的权限
<a name="CHAP_Source.Oracle.ToRDSOracle.ConfigureTarget"></a>

要迁移到 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\$1name*使用您的用户名替换。然后，*your\$1password*替换为安全密码。

## 将 Oracle 转换为 Amazon RDS for Oracle 的限制
<a name="CHAP_Source.Oracle.ToRDSOracle.Limitations"></a>

将 Oracle 架构和代码迁移到 Amazon RDS for Oracle 时应考虑的一些限制：
+  Amazon RDS 中名为 DBA 的预定义角色一般允许 Oracle 数据库引擎上的所有管理特权。对于使用 Oracle 引擎的 Amazon RDS 数据库实例，DBA 角色没有以下权限：
  + 更改数据库
  + 更改系统
  + 创建任何目录
  + 授予任何权限
  + 授予任何角色
  + 创建外部任务

  可以向 Oracle RDS 用户角色授予所有其他特权。
+ Amazon RDS for Oracle 支持传统审核、使用 DBMS\$1FGA 包的精细审核以及 Oracle 的统一审核。
+ Amazon RDS for Oracle 不支持更改数据捕获 (CDC)。要在数据库迁移期间和迁移之后执行更改数据捕获，请使用 AWS Database Migration Service。