

# 在 RDS for Oracle 上使用 Oracle Repository Creation Utility
<a name="Oracle.Resources.RCU"></a>

您可以使用 Amazon RDS 托管 RDS for Oracle 数据库实例，此实例保留架构以支持 Oracle Fusion Middleware 组件。必须先在数据库中为 Fusion Middleware 组件创建和填充架构，然后才能使用这些组件。可使用 Oracle Repository Creation Utility (RCU) 来创建和填充架构。

## RCU 支持的版本和许可选项
<a name="Oracle.Resources.RCU.Versions"></a>

Amazon RDS 仅支持 Oracle Repository Creation Utility (RCU) 版本 12c。您可以在以下配置中使用 RCU：
+ 带 Oracle Database 21c 的 RCU 12c
+ 带 Oracle Database 19c 的 RCU 12c

在使用 RCU 之前，请确保执行以下操作：
+ 获得 Oracle Fusion Middleware 的许可证。
+ 遵循托管存储库的 Oracle 数据库的 Oracle 许可指南。有关更多信息，请参阅 Oracle 文档中的 [Oracle Fusion Middleware 许可信息用户手册](https://docs.oracle.com/en/middleware/fusion-middleware/fmwlc/)。

Fusion MiddleWare 支持 Oracle Database 企业版和标准版 2 上的存储库。Oracle 建议将 Enterprise Edition 用于需要分区的生产安装和需要在线重新建立索引的安装。

在创建 RDS for Oracle 数据库实例之前，确认支持要部署的组件所需的 Oracle 数据库版本。要查找要部署的 Fusion Middleware 组件和版本的要求，请使用 Certification Matrix。有关更多信息，请参阅 Oracle 文档中的 [Oracle Fusion Middleware 支持的系统配置](http://www.oracle.com/technetwork/middleware/ias/downloads/fusion-certification-100350.html)。

Amazon RDS 根据需要支持 Oracle 数据库版本升级。有关更多信息，请参阅 [升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

## RCU 的要求和限制
<a name="Oracle.Resources.RCU.BeforeYouBegin"></a>

您需要 Amazon VPC 才能使用 RCU。您的 Amazon RDS 数据库实例必须仅对您的 Fusion Middleware 组件可用，而不是公共互联网。因此，在私有子网中托管您的 Amazon RDS 数据库实例，可提供更好的安全性。您还需要 RDS for Oracle 数据库实例。有关更多信息，请参阅 [创建并连接到 Oracle 数据库实例](CHAP_GettingStarted.CreatingConnecting.Oracle.md)。

可以为 Amazon RDS 数据库实例中的任何 Fusion Middleware 组件存储架构。已经验证以下架构安装正确：
+ 分析 (ACTIVITIES)
+ 审核服务 (IAU)
+ Audit Services Append (IAU\$1APPEND)
+ Audit Services Viewer (IAU\$1VIEWER)
+ 讨论 (DISCUSSIONS)
+ 元数据服务 (MDS)
+ Oracle Business Intelligence (BIPLATFORM)
+ Oracle Platform Security Services (OPSS)
+ 门户和服务 (WEBCENTER)
+ Portlet 创建者 (PORTLET)
+ 服务表 (STB)
+ SOA 基础设施 (SOAINFRA)
+ User Messaging Service (UCSUMS)
+ WebLogic Services (WLS)

## RCU 的使用准则
<a name="Oracle.Resources.RCU.Recommendations"></a>

以下是针对在此方案中使用数据库实例的一些建议：
+ 建议您对生产工作负载使用多可用区。有关使用多个可用区的更多信息，请参阅[区域、可用区和 Local Zones ](Concepts.RegionsAndAvailabilityZones.md)。
+ 为了提高安全性，Oracle 建议您使用透明数据加密 (TDE) 对静态数据进行加密。如果您拥有包含高级安全选项的 Enterprise Edition 许可证，则可使用 TDE 选项启用静态加密。有关更多信息，请参阅“[Oracle 透明数据加密](Appendix.Oracle.Options.AdvSecurity.md)”。

  Amazon RDS 还提供适用于所有数据库版本的静态加密选项。有关更多信息，请参阅“[加密 Amazon RDS 资源](Overview.Encryption.md)”。
+ 将 VPC 安全组配置为允许应用程序服务器和 Amazon RDS 数据库实例之间的通信。承载 Fusion Middleware 组件的应用程序服务器可位于 Amazon EC2 上或位于本地。

## 运行 RCU
<a name="Oracle.Resources.RCU.Installing"></a>

要创建和填充架构以支持 Fusion Middleware 组件，请使用 Oracle Repository Creation Utility (RCU)。可通过不同方式运行 RCU。

**Topics**
+ [使用命令行通过一个步骤运行 RCU](#Oracle.Resources.RCU.SilentSingle)
+ [使用命令行通过多个步骤运行 RCU](#Oracle.Resources.RCU.SilentMulti)
+ [以交互式模式运行 RCU](#Oracle.Resources.RCU.Interactive)

### 使用命令行通过一个步骤运行 RCU
<a name="Oracle.Resources.RCU.SilentSingle"></a>

如果您在填充任何架构之前不需要对其进行编辑，则可通过一个步骤运行 RCU。否则，请参阅下一部分以了解通过多个步骤运行 RCU。

可使用命令行参数 `-silent` 在静默模式下运行 RCU。在静默模式下运行 RCU 时，可通过创建包含密码的文本文件来避免在命令行中输入密码。创建一个文本文件，其中 `dbUser` 的密码位于第一行，每个组件的密码位于后续行。您将密码文件的名称指定为 RCU 命令的最后一个参数。

**Example**  
以下示例通过一个步骤为 SOA 基础设施组件 (及其依赖项) 创建和填充建构。  
对于 Linux、macOS 或 Unix：  

```
export ORACLE_HOME=/u01/app/oracle/product/12.2.1.0/fmw
export JAVA_HOME=/usr/java/jdk1.8.0_65
${ORACLE_HOME}/oracle_common/bin/rcu \
-silent \
-createRepository \
-connectString ${dbhost}:${dbport}:${dbname} \
-dbUser ${dbuser} \
-dbRole Normal \
-honorOMF \
-schemaPrefix ${SCHEMA_PREFIX} \
-component MDS \
-component STB \
-component OPSS \
-component IAU \
-component IAU_APPEND \
-component IAU_VIEWER \
-component UCSUMS \
-component WLS \
-component SOAINFRA \
-f < /tmp/passwordfile.txt
```

有关更多信息，请参阅 Oracle 文档中的[从命令行运行 Repository Creation Utility](https://docs.oracle.com/middleware/1221/core/RCUUG/GUID-0D3A2959-7CC8-4001-997E-718ADF04C5F2.htm#RCUUG248)。

### 使用命令行通过多个步骤运行 RCU
<a name="Oracle.Resources.RCU.SilentMulti"></a>

要手动编辑架构脚本，请通过多个步骤运行 RCU：

1. 使用 `-generateScript` 命令行参数在 **Prepare Scripts for System Load** 模式下运行 RCU 以便为架构创建脚本。

1. 手动编辑和运行生成的脚本 `script_systemLoad.sql`。

1. 再次使用 `-dataLoad` 命令行参数在 **Perform Product Load** 模式下运行 RCU 以填充架构。

1. 运行生成的清理脚本 `script_postDataLoad.sql`。

要在静默模式下运行 RCU，请指定命令行参数 `-silent`。在静默模式下运行 RCU 时，可通过创建包含密码的文本文件来避免在命令行中键入密码。创建一个文本文件，其中 `dbUser` 的密码位于第一行，每个组件的密码位于后续行。将密码文件的名称指定为 RCU 命令的最后一个参数。

**Example**  
以下示例为 SOA 基础设施组件及其依赖项创建架构脚本。  
对于 Linux、macOS 或 Unix：  

```
export ORACLE_HOME=/u01/app/oracle/product/12.2.1.0/fmw
export JAVA_HOME=/usr/java/jdk1.8.0_65
${ORACLE_HOME}/oracle_common/bin/rcu \
-silent \
-generateScript \
-connectString ${dbhost}:${dbport}:${dbname} \
-dbUser ${dbuser} \
-dbRole Normal \
-honorOMF \
[-encryptTablespace true] \
-schemaPrefix ${SCHEMA_PREFIX} \
-component MDS \
-component STB \
-component OPSS \
-component IAU \
-component IAU_APPEND \
-component IAU_VIEWER \
-component UCSUMS \
-component WLS \
-component SOAINFRA \
-scriptLocation /tmp/rcuscripts \
-f < /tmp/passwordfile.txt
```
现在，您可以编辑生成的脚本，连接到您的 Oracle 数据库实例和运行脚本。生成的脚本名为 `script_systemLoad.sql`。有关连接到 Oracle 数据库实例的信息，请参阅[步骤 3：将 SQL 客户端连接到 Oracle 数据库实例](CHAP_GettingStarted.CreatingConnecting.Oracle.md#CHAP_GettingStarted.Connecting.Oracle)。  
以下示例为 SOA 基础设施组件 (及其依赖项) 填充架构。  
对于 Linux、macOS 或 Unix：  

```
export JAVA_HOME=/usr/java/jdk1.8.0_65
${ORACLE_HOME}/oracle_common/bin/rcu \
-silent \
-dataLoad \
-connectString ${dbhost}:${dbport}:${dbname} \
-dbUser ${dbuser} \
-dbRole Normal \
-honorOMF \
-schemaPrefix ${SCHEMA_PREFIX} \
-component MDS \
-component STB \
-component OPSS \
-component IAU \
-component IAU_APPEND \
-component IAU_VIEWER \
-component UCSUMS \
-component WLS \
-component SOAINFRA \
-f < /tmp/passwordfile.txt
```
最后，您连接到 Oracle 数据库实例，并运行清除脚本。该脚本名为 `script_postDataLoad.sql`。

有关更多信息，请参阅 Oracle 文档中的[从命令行运行 Repository Creation Utility](https://docs.oracle.com/middleware/1221/core/RCUUG/GUID-0D3A2959-7CC8-4001-997E-718ADF04C5F2.htm#RCUUG248)。

### 以交互式模式运行 RCU
<a name="Oracle.Resources.RCU.Interactive"></a>

要使用 RCU 图形用户界面，请以交互模式运行 RCU。加入 `-interactive` 参数，然后省略 `-silent` 参数。有关更多信息，请参阅 Oracle 文档中的[了解 Repository Creation Utility 屏幕](https://docs.oracle.com/middleware/1213/core/RCUUG/rcu_screens.htm#RCUUG143)。

**Example**  
以下示例以交互模式启动 RCU 并预填写连接信息。  
对于 Linux、macOS 或 Unix：  

```
export ORACLE_HOME=/u01/app/oracle/product/12.2.1.0/fmw
export JAVA_HOME=/usr/java/jdk1.8.0_65
${ORACLE_HOME}/oracle_common/bin/rcu \
-interactive \
-createRepository \
-connectString ${dbhost}:${dbport}:${dbname} \
-dbUser ${dbuser} \
-dbRole Normal
```

## RCU 问题排查
<a name="Oracle.Resources.RCU.KnownIssues"></a>

请注意以下问题。

**Topics**
+ [Oracle Managed Files (OMF)](#Oracle.Resources.RCU.KnownIssues.OMF)
+ [对象权限](#Oracle.Resources.RCU.KnownIssues.object-privs)
+ [Enterprise Scheduler Service](#Oracle.Resources.RCU.KnownIssues.Scheduler)

### Oracle Managed Files (OMF)
<a name="Oracle.Resources.RCU.KnownIssues.OMF"></a>

Amazon RDS 使用 OMF 数据文件来简化存储管理。您可以自定义表空间属性，例如大小和范围管理。但是，如果在运行 RCU 时指定数据文件名，则表空间代码将失败，错误为 `ORA-20900`。可通过以下方式将 RCU 与 OMF 结合使用：
+ 在 RCU 12.2.1.0 和更高版本中，使用 `-honorOMF` 命令行参数。
+ 在 RCU 12.1.0.3 和更高版本中，使用多个步骤并编辑生成的脚本。有关更多信息，请参阅 [使用命令行通过多个步骤运行 RCU](#Oracle.Resources.RCU.SilentMulti)。

### 对象权限
<a name="Oracle.Resources.RCU.KnownIssues.object-privs"></a>

由于 Amazon RDS 是一项托管式服务，因此，您不具有对 RDS for Oracle 数据库实例的完全 `SYSDBA` 访问权限。不过，RCU 12c 支持具有较低权限的用户。在大多数情况下，主用户权限足以创建存储库。

主账户可以直接授予已授予 `WITH GRANT OPTION` 的权限。在某些情况下，在尝试授予 `ORA-01031` 对象权限时，RCU 可能失败，错误为 `SYS`。您可以重试并运行 `rdsadmin_util.grant_sys_object` 存储过程，如以下示例所示：

```
BEGIN
  rdsadmin.rdsadmin_util.grant_sys_object('GV_$SESSION','MY_DBA','SELECT');
END;
/
```

如果您尝试授予对于对象 `SCHEMA_VERSION_REGISTRY` 的 `SYS` 权限，则操作可能会失败，错误为 `ORA-20199: Error in rdsadmin_util.grant_sys_object`。您可以使用架构拥有者名称（即 `SYSTEM`）限定表 `SCHEMA_VERSION_REGISTRY$` 和视图 `SCHEMA_VERSION_REGISTRY`，然后重试该操作。或者，您可以创建同义词。以主用户身份登录并运行以下语句：

```
CREATE OR REPLACE VIEW SYSTEM.SCHEMA_VERSION_REGISTRY 
  AS SELECT * FROM SYSTEM.SCHEMA_VERSION_REGISTRY$;
CREATE OR REPLACE PUBLIC SYNONYM SCHEMA_VERSION_REGISTRY FOR SYSTEM.SCHEMA_VERSION_REGISTRY;
CREATE OR REPLACE PUBLIC SYNONYM SCHEMA_VERSION_REGISTRY$ FOR SCHEMA_VERSION_REGISTRY;
```

### Enterprise Scheduler Service
<a name="Oracle.Resources.RCU.KnownIssues.Scheduler"></a>

当您使用 RCU 删除 Enterprise Scheduler Service 存储库时，RCU 可能失败，错误为 `Error: Component drop check failed`。