

# 使用第三方软件和 RDS for Oracle 数据库实例
<a name="Oracle.Resources"></a>

您可以托管支持工具和第三方软件的 RDS for Oracle 数据库实例。

**Topics**
+ [将 Oracle GoldenGate 与 Amazon RDS for Oracle 结合使用](Appendix.OracleGoldenGate.md)
+ [在 RDS for Oracle 上使用 Oracle Repository Creation Utility](Oracle.Resources.RCU.md)
+ [在 Amazon EC2 实例上配置 Oracle Connection Manager](oracle-cman.md)
+ [在 Amazon RDS 上的 Oracle 中安装 Siebel 数据库](Oracle.Resources.Siebel.md)

# 将 Oracle GoldenGate 与 Amazon RDS for Oracle 结合使用
<a name="Appendix.OracleGoldenGate"></a>

Oracle GoldenGate 可收集、复制和管理数据库之间的事务数据。它是一个基于日志的更改数据捕获（CDC）和复制软件包，与数据库结合使用，适用于联机事务处理（OLTP）系统。Oracle GoldenGate 从源数据库创建包含最近更改的数据的跟踪记录文件。然后，它将这些文件推送到服务器，在此处，一个进程将跟踪记录文件转换为标准 SQL 以应用于目标数据库。

Oracle GoldenGate 与 RDS for Oracle 结合使用可支持以下功能：
+ 主动/主动数据库复制
+ 灾难恢复
+ 数据保护
+ 区域内和跨区域复制
+ 零停机时间迁移和升级
+ 在 RDS for Oracle 数据库实例与非 Oracle 数据库之间复制数据
**注意**  
有关支持的数据库的列表，请参阅 Oracle 文档中的 [Oracle Fusion Middleware 支持的系统配置](https://www.oracle.com/middleware/technologies/fusion-certification.html)。

您可以将 Oracle GoldenGate 与 RDS for Oracle 结合使用以升级到 Oracle Database 的主要版本。例如，可以使用 Oracle GoldenGate，从 Oracle Database 11g 本地数据库升级到 Amazon RDS 数据库实例上的 Oracle Database 19c。

**Topics**
+ [Oracle GoldenGate 支持的版本和许可选项](#Appendix.OracleGoldenGate.licensing)
+ [Oracle GoldenGate 的要求和限制](#Appendix.OracleGoldenGate.requirements)
+ [Oracle GoldenGate 架构](Appendix.OracleGoldenGate.Overview.md)
+ [设置 Oracle GoldenGate](Appendix.OracleGoldenGate.setting-up.md)
+ [使用 Oracle GoldenGate 的 EXTRACT 和 REPLICAT 实用程序](Appendix.OracleGoldenGate.ExtractReplicat.md)
+ [监控 Oracle GoldenGate](Appendix.OracleGoldenGate.Monitoring.md)
+ [Oracle GoldenGate 问题排查](Appendix.OracleGoldenGate.Troubleshooting.md)

## Oracle GoldenGate 支持的版本和许可选项
<a name="Appendix.OracleGoldenGate.licensing"></a>

可以将 RDS for Oracle 的标准版 2（SE2）或企业版（EE）与 Oracle GoldenGate 版本 12c 和更高版本结合使用。您可以使用以下 Oracle GoldenGate 功能：
+ 支持 Oracle GoldenGate 远程捕获（提取）。
+ 使用传统非 CDB 数据库架构的 RDS for Oracle 数据库实例支持捕获（提取）。运行 Oracle Database 21c 或 Oracle Database 19c 版本 19.0.0.0.ru-2024-04.rur-2024-04.r1 或更高版本的 CDB 支持 Oracle GoldenGate 远程 PDB 捕获。
+ 使用非 CDB 或 CDB 架构的 RDS for Oracle 数据库实例支持 Oracle GoldenGate 远程交付（复制）。远程交付支持集成复制、并行复制、协调复制和经典复制。
+ RDS for Oracle 支持 Oracle GoldenGate 的经典和微服务架构。
+ 在使用集成捕获模式时，支持 Oracle GoldenGate DDL 和序列值复制。

您负责管理 Oracle GoldenGate 许可（自带许可）以用于所有 AWS 区域中的 Amazon RDS。有关更多信息，请参阅 [RDS for Oracle 许可选项](Oracle.Concepts.Licensing.md)。

## Oracle GoldenGate 的要求和限制
<a name="Appendix.OracleGoldenGate.requirements"></a>

在使用 Oracle GoldenGate 和 RDS for Oracle 时，请考虑以下要求和限制：
+ 您负责设置和管理 Oracle GoldenGate 以用于 RDS for Oracle。
+ 您负责设置经过源数据库和目标数据库认证的 Oracle GoldenGate 版本。有关更多信息，请参阅 Oracle 文档中的 [Oracle Fusion Middleware 支持的系统配置](https://www.oracle.com/middleware/technologies/fusion-certification.html)。
+ 您可以在许多不同的 AWS 环境中将 Oracle GoldenGate 用于许多不同的使用案例。如果您遇到与 Oracle GoldenGate 相关的支持相关问题，请联系 Oracle 支持服务。
+ 您可以在使用 Oracle 透明数据加密（TDE）的 RDS for Oracle 数据库实例上使用 Oracle GoldenGate。要保持复制数据的完整性，请使用 Amazon EBS 加密卷或跟踪记录文件加密在 Oracle GoldenGate 枢纽上配置加密。同时，为 Oracle GoldenGate 枢纽与源和目标数据库实例之间发送的数据配置加密。RDS for Oracle 数据库实例支持使用 [Oracle 安全套接字层](Appendix.Oracle.Options.SSL.md) 或 [Oracle 本机网络加密](Appendix.Oracle.Options.NetworkEncryption.md) 加密。

# Oracle GoldenGate 架构
<a name="Appendix.OracleGoldenGate.Overview"></a>

与 Amazon RDS 结合使用的 Oracle GoldenGate 架构包含以下解耦模块：

源数据库  
源数据库可以是本地 Oracle 数据库、Amazon EC2 实例上的 Oracle 数据库或 Amazon RDS 数据库实例上的 Oracle 数据库。

Oracle GoldenGate 枢纽  
Oracle GoldenGate 枢纽将事务信息从源数据库移动到目标数据库。枢纽可以是以下任意一种：  
+ 安装了 Oracle Database 和 Oracle GoldenGate 的 Amazon EC2 实例
+ 本地 Oracle 安装
可以有多个 Amazon EC2 枢纽。如果要将 Oracle GoldenGate 用于跨区域复制，建议您使用两个枢纽。

目标数据库  
目标数据库可位于 Amazon RDS 数据库实例上、位于 Amazon EC2 实例上或位于一个本地位置。

以下各节介绍 Amazon RDS 上 Oracle GoldenGate 的常见场景。

**Topics**
+ [本地源数据库和 Oracle GoldenGate 枢纽](#Appendix.OracleGoldenGate.on-prem-source-gg-hub)
+ [本地源数据库和 Amazon EC2 枢纽](#Appendix.OracleGoldenGate.on-prem-source-ec2-hub)
+ [Amazon RDS 源数据库和 Amazon EC2 枢纽](#Appendix.OracleGoldenGate.rds-source-ec2-hub)
+ [Amazon EC2 源数据库和 Amazon EC2 枢纽](#Appendix.OracleGoldenGate.ec2-source-ec2-hub)
+ [不同 AWS 区域中的 Amazon EC2 枢纽](#Appendix.OracleGoldenGate.cross-region-hubs)

## 本地源数据库和 Oracle GoldenGate 枢纽
<a name="Appendix.OracleGoldenGate.on-prem-source-gg-hub"></a>

在此场景中，本地 Oracle 源数据库和本地 GoldenGate 枢纽向目标 Amazon RDS 数据库实例提供数据。

![\[使用 Amazon RDS 的 Oracle GoldenGate 配置 0\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/oracle-gg0.png)


## 本地源数据库和 Amazon EC2 枢纽
<a name="Appendix.OracleGoldenGate.on-prem-source-ec2-hub"></a>

在此场景中，本地 Oracle 数据库充当源数据库。其会连接到 Amazon EC2 实例枢纽。此枢纽向目标 RDS for Oracle 数据库实例提供数据。

![\[使用 Amazon RDS 的 Oracle GoldenGate 配置 1\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/oracle-gg1.png)


## Amazon RDS 源数据库和 Amazon EC2 枢纽
<a name="Appendix.OracleGoldenGate.rds-source-ec2-hub"></a>

在此场景中，RDS for Oracle 数据库实例充当源数据库。其会连接到 Amazon EC2 实例枢纽。此枢纽向目标 RDS for Oracle 数据库实例提供数据。

![\[使用 Amazon RDS 的 Oracle GoldenGate 配置 2\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/oracle-gg2.png)


## Amazon EC2 源数据库和 Amazon EC2 枢纽
<a name="Appendix.OracleGoldenGate.ec2-source-ec2-hub"></a>

在此场景中，Amazon EC2 实例上的 Oracle 数据库充当源数据库。其会连接到 Amazon EC2 实例枢纽。此枢纽向目标 RDS for Oracle 数据库实例提供数据。

![\[使用 Amazon RDS 的 Oracle GoldenGate 配置 3\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/oracle-gg3.png)


## 不同 AWS 区域中的 Amazon EC2 枢纽
<a name="Appendix.OracleGoldenGate.cross-region-hubs"></a>

在此场景中，Amazon RDS 数据库实例上的 Oracle 数据库连接到相同 AWS 区域中的 Amazon EC2 实例枢纽。该枢纽连接到其他 AWS 区域中的 Amazon EC2 实例枢纽。第二个枢纽向与第二个 Amazon EC2 实例枢纽位于相同 AWS 区域中的目标 RDS for Oracle 数据库实例提供数据。

![\[使用 Amazon RDS 的 Oracle GoldenGate 配置 4\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/oracle-gg4.png)


**注意**  
影响在本地环境中运行 Oracle GoldenGate 的任何问题也会影响在 AWS 上运行 Oracle GoldenGate。强烈建议对 Oracle GoldenGate 枢纽进行监控，确保在发生故障转移的情况下恢复 `EXTRACT` 和 `REPLICAT`。由于 Oracle GoldenGate 枢纽在 Amazon EC2 实例上运行，因此 Amazon RDS 不会管理 Oracle GoldenGate 枢纽，也无法确保其是否在运行。

# 设置 Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.setting-up"></a>

要使用 Amazon RDS 设置 Oracle GoldenGate，请在 Amazon EC2 实例上配置枢纽，然后配置源数据库和目标数据库。以下各节举例说明了如何设置 Oracle GoldenGate 以便与 Amazon RDS for Oracle 结合使用。

**Topics**
+ [在 Amazon EC2 上设置 Oracle GoldenGate 枢纽](#Appendix.OracleGoldenGate.Hub)
+ [设置源数据库以便与 Amazon RDS 上的 Oracle GoldenGate 结合使用](#Appendix.OracleGoldenGate.Source)
+ [设置目标数据库以便与 Amazon RDS 上的 Oracle GoldenGate 结合使用](#Appendix.OracleGoldenGate.Target)

## 在 Amazon EC2 上设置 Oracle GoldenGate 枢纽
<a name="Appendix.OracleGoldenGate.Hub"></a>

要在 Amazon EC2 实例上创建 Oracle GoldenGate 枢纽，首先应使用 Oracle RDBMS 的完整客户端安装创建 Amazon EC2 实例。Amazon EC2 实例也必须已安装 Oracle GoldenGate 软件。Oracle GoldenGate 软件版本取决于源和目标数据库版本。有关安装 Oracle GoldenGate 的更多信息，请参阅 [Oracle GoldenGate 文档](https://docs.oracle.com/en/middleware/goldengate/core/index.html)。

用作 Oracle GoldenGate 枢纽的 Amazon EC2 实例会处理来自源数据库的事务信息并将这些信息存储到跟踪记录文件中。要支持此过程，请确保满足以下要求：
+ 您为跟踪记录文件分配了足够的存储空间。
+ Amazon EC2 实例有足够的处理能力来管理数据量。
+ EC2 实例在写入跟踪文件之前，有足够的内存来存储事务信息。

**在 Amazon EC2 实例上建立 Oracle GoldenGate 经典架构枢纽**

1. 在 Oracle GoldenGate 目录中创建子目录。

   在 Amazon EC2 命令行 shell 中，启动 `ggsci`（Oracle GoldenGate 命令解释器）。`CREATE SUBDIRS` 命令在 `/gg` 目录下为参数、报告和检查点文件创建子目录。

   ```
   prompt$ cd /gg
   prompt$ ./ggsci
   
   GGSCI> CREATE SUBDIRS
   ```

1. 配置 `mgr.prm` 文件。

   以下示例向 `$GGHOME/dirprm/mgr.prm` 文件中添加行。

   ```
   PORT 8199
   PurgeOldExtracts ./dirdat/*, UseCheckpoints, MINKEEPDAYS 5
   ```

1. 启动管理器。

   以下示例启动 `ggsci` 并运行 `start mgr` 命令。

   ```
   GGSCI> start mgr
   ```

Oracle GoldenGate 枢纽现已就绪，可供使用。

## 设置源数据库以便与 Amazon RDS 上的 Oracle GoldenGate 结合使用
<a name="Appendix.OracleGoldenGate.Source"></a>

完成以下任务，设置源数据库以便与 Oracle GoldenGate 结合使用：

**Topics**
+ [步骤 1：在源数据库上开启补充日志记录](#Appendix.OracleGoldenGate.Source.Logging)
+ [步骤 2：将 ENABLE\$1GOLDENGATE\$1REPLICATION 初始化参数设置为 true](#Appendix.OracleGoldenGate.Source.enable-gg-rep)
+ [步骤 3：在源数据库上设置日志保留期](#Appendix.OracleGoldenGate.Source.Retention)
+ [步骤 4：在源数据库上创建 Oracle GoldenGate 用户账户。](#Appendix.OracleGoldenGate.Source.Account)
+ [步骤 5：向用户账户授予对源数据库的权限](#Appendix.OracleGoldenGate.Source.Privileges)
+ [步骤 6：为源数据库添加 TNS 别名](#Appendix.OracleGoldenGate.Source.TNS)

### 步骤 1：在源数据库上开启补充日志记录
<a name="Appendix.OracleGoldenGate.Source.Logging"></a>

要启用最低数据库级别的补充日志记录，请运行以下 PL/SQL 过程：

```
EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD')
```

### 步骤 2：将 ENABLE\$1GOLDENGATE\$1REPLICATION 初始化参数设置为 true
<a name="Appendix.OracleGoldenGate.Source.enable-gg-rep"></a>

将 `ENABLE_GOLDENGATE_REPLICATION` 初始化参数设置为 `true` 时，它允许数据库服务支持逻辑复制。如果源数据库位于 Amazon RDS 数据库实例上，请确保为数据库实例分配一个参数组，且将 `ENABLE_GOLDENGATE_REPLICATION` 初始化参数设置为 `true`。有关 `ENABLE_GOLDENGATE_REPLICATION` 初始化参数的更多信息，请参阅 [Oracle Database 文档](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html)。

### 步骤 3：在源数据库上设置日志保留期
<a name="Appendix.OracleGoldenGate.Source.Retention"></a>

确保将源数据库配置为保留存档重做日志。请考虑以下准则：
+ 以小时为单位指定日志保留的持续时间。最小值为一小时。
+ 设置持续时间以超过源数据库实例的任何可能的停机时间、任何可能的通信时间以及源实例的任何可能的联网问题期间。指定这样的持续时间后，可允许 Oracle GoldenGate 根据需要从源实例恢复日志。
+ 确保您的实例上有足够的文件存储空间。

例如，将存档重做日志的保留期设置为 24 小时。

```
EXEC rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24)
```

如果未启用日志保留，或者保留值太小，则将收到类似以下内容的错误消息。

```
2022-03-06 06:17:27  ERROR   OGG-00446  error 2 (No such file or directory) 
opening redo log /rdsdbdata/db/GGTEST3_A/onlinelog/o1_mf_2_9k4bp1n6_.log for sequence 1306 
Not able to establish initial position for begin time 2022-03-06 06:16:55.
```

由于您的数据库实例会保留存档的重做日志，因此请确保您有足够的空间存放这些文件。要查看过去 *num\$1hours* 小时内使用了多少空间，请使用以下查询，并将 *num\$1hours* 替换为小时数。

```
SELECT SUM(BLOCKS * BLOCK_SIZE) BYTES FROM V$ARCHIVED_LOG 
   WHERE NEXT_TIME>=SYSDATE-num_hours/24 AND DEST_ID=1;
```

### 步骤 4：在源数据库上创建 Oracle GoldenGate 用户账户。
<a name="Appendix.OracleGoldenGate.Source.Account"></a>

Oracle GoldenGate 作为数据库用户运行，并且需要相应数据库权限才能访问源数据库的重做和存档的重做日志。要提供这些权限，请在源数据库上创建用户账户。有关 Oracle GoldenGate 用户账户权限的更多信息，请参阅 [Oracle 文档](https://docs.oracle.com/en/middleware/goldengate/core/19.1/oracle-db/establishing-oracle-goldengate-credentials.html#GUID-79122058-27B0-4FB6-B3DC-B7D1B67EB053)。

下列语句创建名为 `oggadm1` 的用户账户。

```
CREATE TABLESPACE administrator;
CREATE USER oggadm1  IDENTIFIED BY "password"
   DEFAULT TABLESPACE ADMINISTRATOR TEMPORARY TABLESPACE TEMP;
ALTER USER oggadm1 QUOTA UNLIMITED ON administrator;
```

**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

### 步骤 5：向用户账户授予对源数据库的权限
<a name="Appendix.OracleGoldenGate.Source.Privileges"></a>

在此任务中，您将为源数据库上的数据库用户授予必要的账户权限。

**向账户授予对源数据库的权限**

1. 使用 SQL 命令 `grant` 和 `rdsadmin.rdsadmin_util` 过程 `grant_sys_object` 向 Oracle GoldenGate 用户账户授予必要权限。下列语句向名为 `oggadm1` 的用户授予权限。

   ```
   GRANT CREATE SESSION, ALTER SESSION TO oggadm1;
   GRANT RESOURCE TO oggadm1;
   GRANT SELECT ANY DICTIONARY TO oggadm1;
   GRANT FLASHBACK ANY TABLE TO oggadm1;
   GRANT SELECT ANY TABLE TO oggadm1;
   GRANT SELECT_CATALOG_ROLE TO rds_master_user_name WITH ADMIN OPTION;
   EXEC rdsadmin.rdsadmin_util.grant_sys_object ('DBA_CLUSTERS', 'OGGADM1');
   GRANT EXECUTE ON DBMS_FLASHBACK TO oggadm1;
   GRANT SELECT ON SYS.V_$DATABASE TO oggadm1;
   GRANT ALTER ANY TABLE TO oggadm1;
   ```

1. 授予用户账户作为 Oracle GoldenGate 管理员所需的权限。运行以下 PL/SQL 程序。

   ```
   EXEC rdsadmin.rdsadmin_dbms_goldengate_auth.grant_admin_privilege (
       grantee                 => 'OGGADM1',
       privilege_type          => 'capture',
       grant_select_privileges => true, 
       do_grants               => TRUE);
   ```

   要撤消权限，请使用同一个程序包中的 `revoke_admin_privilege` 过程。

### 步骤 6：为源数据库添加 TNS 别名
<a name="Appendix.OracleGoldenGate.Source.TNS"></a>

将以下条目添加到 Oracle 主目录中的 `$ORACLE_HOME/network/admin/tnsnames.ora`，以供 `EXTRACT` 进程使用。有关 `tnsnames.ora` 文件的更多信息，请参阅 [Oracle 文档](https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/local-naming-parameters-in-tns-ora-file.html#GUID-7F967CE5-5498-427C-9390-4A5C6767ADAA)。

```
OGGSOURCE=
   (DESCRIPTION= 
        (ENABLE=BROKEN)
        (ADDRESS_LIST= 
            (ADDRESS=(PROTOCOL=TCP)(HOST=goldengate-source.abcdef12345.us-west-2.rds.amazonaws.com)(PORT=8200)))
        (CONNECT_DATA=(SERVICE_NAME=ORCL))
    )
```

## 设置目标数据库以便与 Amazon RDS 上的 Oracle GoldenGate 结合使用
<a name="Appendix.OracleGoldenGate.Target"></a>

在本任务中，您将设置一个目标数据库实例以与 Oracle GoldenGate 结合使用。

**Topics**
+ [步骤 1：将 ENABLE\$1GOLDENGATE\$1REPLICATION 初始化参数设置为 true](#Appendix.OracleGoldenGate.Target.enable-gg-rep)
+ [步骤 2：在目标数据库上创建 Oracle GoldenGate 用户账户](#Appendix.OracleGoldenGate.Target.User)
+ [步骤 3：授予账户对目标数据库的权限](#Appendix.OracleGoldenGate.Target.Privileges)
+ [步骤 4：为目标数据库添加 TNS 别名](#Appendix.OracleGoldenGate.Target.TNS)

### 步骤 1：将 ENABLE\$1GOLDENGATE\$1REPLICATION 初始化参数设置为 true
<a name="Appendix.OracleGoldenGate.Target.enable-gg-rep"></a>

将 `ENABLE_GOLDENGATE_REPLICATION` 初始化参数设置为 `true` 时，它允许数据库服务支持逻辑复制。如果源数据库位于 Amazon RDS 数据库实例上，请确保为数据库实例分配一个参数组，且将 `ENABLE_GOLDENGATE_REPLICATION` 初始化参数设置为 `true`。有关 `ENABLE_GOLDENGATE_REPLICATION` 初始化参数的更多信息，请参阅 [Oracle Database 文档](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ENABLE_GOLDENGATE_REPLICATION.html)。

### 步骤 2：在目标数据库上创建 Oracle GoldenGate 用户账户
<a name="Appendix.OracleGoldenGate.Target.User"></a>

Oracle GoldenGate 以数据库用户身份运行，并且需要相应的数据库权限。为了确保它具备这些权限，请在目标数据库上创建用户帐户。

下列语句将创建名为 `oggadm1` 的用户。

```
CREATE TABLESPSACE administrator;
CREATE USER oggadm1  IDENTIFIED BY "password" 
   DEFAULT TABLESPACE administrator 
   TEMPORARY TABLESPACE temp;
ALTER USER oggadm1 QUOTA UNLIMITED ON administrator;
```

**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

### 步骤 3：授予账户对目标数据库的权限
<a name="Appendix.OracleGoldenGate.Target.Privileges"></a>

在此任务中，您将为目标数据库上的数据库用户授予必要的账户权限。

**授予账户对目标数据库的权限**

1. 向目标数据库上的 Oracle GoldenGate 用户账户授予必要权限。在以下示例中，您向 `oggadm1` 授予权限。

   ```
   GRANT CREATE SESSION        TO oggadm1;
   GRANT ALTER SESSION         TO oggadm1;
   GRANT CREATE CLUSTER        TO oggadm1;
   GRANT CREATE INDEXTYPE      TO oggadm1;
   GRANT CREATE OPERATOR       TO oggadm1;
   GRANT CREATE PROCEDURE      TO oggadm1;
   GRANT CREATE SEQUENCE       TO oggadm1;
   GRANT CREATE TABLE          TO oggadm1;
   GRANT CREATE TRIGGER        TO oggadm1;
   GRANT CREATE TYPE           TO oggadm1;
   GRANT SELECT ANY DICTIONARY TO oggadm1;
   GRANT CREATE ANY TABLE      TO oggadm1;
   GRANT ALTER ANY TABLE       TO oggadm1;
   GRANT LOCK ANY TABLE        TO oggadm1;
   GRANT SELECT ANY TABLE      TO oggadm1;
   GRANT INSERT ANY TABLE      TO oggadm1;
   GRANT UPDATE ANY TABLE      TO oggadm1;
   GRANT DELETE ANY TABLE      TO oggadm1;
   ```

1. 授予用户账户作为 Oracle GoldenGate 管理员所需的权限。运行以下 PL/SQL 程序。

   ```
   EXEC rdsadmin.rdsadmin_dbms_goldengate_auth.grant_admin_privilege (
       grantee                 => 'OGGADM1',
       privilege_type          => 'apply',
       grant_select_privileges => true, 
       do_grants               => TRUE);
   ```

   要撤消权限，请使用同一个程序包中的 `revoke_admin_privilege` 过程。

### 步骤 4：为目标数据库添加 TNS 别名
<a name="Appendix.OracleGoldenGate.Target.TNS"></a>

将以下条目添加到 Oracle 主目录中的 `$ORACLE_HOME/network/admin/tnsnames.ora`，以供 `REPLICAT` 进程使用。对于 Oracle 多租户数据库，请确保 TNS 别名指向 PDB 的服务名称。有关 `tnsnames.ora` 文件的更多信息，请参阅 [Oracle 文档](https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/local-naming-parameters-in-tns-ora-file.html#GUID-7F967CE5-5498-427C-9390-4A5C6767ADAA)。

```
OGGTARGET=
    (DESCRIPTION= 
        (ENABLE=BROKEN)
        (ADDRESS_LIST= 
            (ADDRESS=(PROTOCOL=TCP)(HOST=goldengate-target.abcdef12345.us-west-2.rds.amazonaws.com)(PORT=8200)))
        (CONNECT_DATA=(SERVICE_NAME=ORCL))
    )
```

# 使用 Oracle GoldenGate 的 EXTRACT 和 REPLICAT 实用程序
<a name="Appendix.OracleGoldenGate.ExtractReplicat"></a>

Oracle GoldenGate 实用程序 `EXTRACT` 和 `REPLICAT` 结合使用，以使用跟踪记录文件通过增量事务复制将源数据库和目标数据库保持同步。源数据库上发生的所有更改会由 `EXTRACT` 自动检测，进行格式设置，然后传输至 Oracle GoldenGate 本地或 Amazon EC2 实例枢纽上的跟踪文件。初始加载完成后，由 `REPLICAT` 实用程序从这些文件读取数据并复制到目标数据库。

## 运行 Oracle GoldenGate EXTRACT 实用程序
<a name="Appendix.OracleGoldenGate.Extract"></a>

`EXTRACT` 实用程序可对源数据库中的数据进行检索、转换并输出至跟踪文件。基本过程如下所示：

1. `EXTRACT` 将事务详细信息排队到内存或临时磁盘存储中。

1. 源数据库提交事务。

1. `EXTRACT` 将事务详细信息写入跟踪文件。

1. 跟踪记录文件将这些详细信息路由到 Oracle GoldenGate 本地或 Amazon EC2 实例枢纽，然后路由到目标数据库。

以下步骤启动 `EXTRACT` 实用程序，从源数据库 `OGGSOURCE` 的 `EXAMPLE.TABLE` 中捕获数据，然后创建跟踪记录文件。

**运行 EXTRACT 实用程序**

1. 在 Oracle GoldenGate 枢纽（本地或 Amazon EC2 实例）上配置 `EXTRACT` 参数文件。下面的列表显示了一个名为 `$GGHOME/dirprm/eabc.prm` 的示例 `EXTRACT` 参数文件。

   ```
   EXTRACT EABC
    
   USERID oggadm1@OGGSOURCE, PASSWORD "my-password"
   EXTTRAIL /path/to/goldengate/dirdat/ab 
    
   IGNOREREPLICATES
   GETAPPLOPS
   TRANLOGOPTIONS EXCLUDEUSER OGGADM1
   	 
   TABLE EXAMPLE.TABLE;
   ```

1. 在 Oracle GoldenGate 枢纽上，登录到源数据库，并启动 Oracle GoldenGate 命令行界面 `ggsci`。下面的示例说明了登录格式。

   ```
   dblogin oggadm1@OGGSOURCE
   ```

1. 添加事务数据以便为数据库表开启补充日志记录。

   ```
   add trandata EXAMPLE.TABLE
   ```

1. 使用 `ggsci` 命令行以及下列命令，启用 `EXTRACT` 实用程序。

   ```
   add extract EABC tranlog, INTEGRATED tranlog, begin now
   add exttrail /path/to/goldengate/dirdat/ab 
      extract EABC, 
      MEGABYTES 100
   ```

1. 向数据库注册 `EXTRACT` 实用程序，以便不删除存档日志。此任务可让您在必要时恢复未提交的旧事务。要向数据库注册 `EXTRACT` 实用程序，请使用下面的命令。

   ```
   register EXTRACT EABC, DATABASE
   ```

1. 使用下面的命令启动 `EXTRACT` 实用程序。

   ```
   start EABC
   ```

## 运行 Oracle GoldenGate REPLICAT 实用程序
<a name="Appendix.OracleGoldenGate.Replicat"></a>

`REPLICAT` 实用程序将跟踪记录文件中的事务信息“推送”至目标数据库。

以下步骤启用并启动 `REPLICAT` 实用程序，以便它可以将捕获的数据复制到目标数据库 `OGGTARGET` 的表 `EXAMPLE.TABLE` 中。

**运行 REPLICATE 实用程序**

1. 在 Oracle GoldenGate 枢纽（本地或 EC2 实例）上配置 `REPLICAT` 参数文件。下面的列表显示了一个名为 `$GGHOME/dirprm/rabc.prm` 的示例 `REPLICAT` 参数文件。

   ```
   REPLICAT RABC
    
   USERID oggadm1@OGGTARGET, password "my-password"
    
   ASSUMETARGETDEFS
   MAP EXAMPLE.TABLE, TARGET EXAMPLE.TABLE;
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

1. 登录目标数据库并启动 Oracle GoldenGate 命令行界面（`ggsci`）。下面的示例说明了登录格式。

   ```
   dblogin userid oggadm1@OGGTARGET
   ```

1. 使用 `ggsci` 命令行，添加检查点表。所指示的用户应是 Oracle GoldenGate 用户账户，而不是目标表架构拥有者。下面的示例创建一个名为 `gg_checkpoint` 的检查点表。

   ```
   add checkpointtable oggadm1.oggchkpt
   ```

1. 要启用 `REPLICAT` 实用程序，请使用下面的命令。

   ```
   add replicat RABC EXTTRAIL /path/to/goldengate/dirdat/ab CHECKPOINTTABLE oggadm1.oggchkpt 
   ```

1. 使用下面的命令启动 `REPLICAT` 实用程序。

   ```
   start RABC
   ```

# 监控 Oracle GoldenGate
<a name="Appendix.OracleGoldenGate.Monitoring"></a>

使用 Oracle GoldenGate 进行复制时，请确保 Oracle GoldenGate 进程已启动并正在运行，且源数据库和目标数据库已同步。您可以使用以下监控工具：
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 是一种监控服务，在这种模式下用于监控 GoldenGate 错误日志。
+ [Amazon SNS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html) 是一种消息通知服务，在此模式中用于发送电子邮件通知。

有关详细说明，请参阅[使用 Amazon CloudWatch 监控 Oracle GoldenGate 日志](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/monitor-oracle-goldengate-logs-by-using-amazon-cloudwatch.html)。

# Oracle GoldenGate 问题排查
<a name="Appendix.OracleGoldenGate.Troubleshooting"></a>

本节说明 Oracle GoldenGate 与 Amazon RDS for Oracle 结合使用时的最常见问题。

**Topics**
+ [打开联机重做日志时出错](#Appendix.OracleGoldenGate.Troubleshooting.Logs)
+ [Oracle GoldenGate 似乎配置正确，但复制不起作用](#Appendix.OracleGoldenGate.Troubleshooting.Replication)
+ [由于 SYS 上的查询，集成 REPLICAT 速度缓慢。"\$1DBA\$1APPLY\$1CDR\$1INFO"](#Appendix.OracleGoldenGate.IR)

## 打开联机重做日志时出错
<a name="Appendix.OracleGoldenGate.Troubleshooting.Logs"></a>

确保将数据库配置为保留存档的重做日志。请考虑以下准则：
+ 以小时为单位指定日志保留的持续时间。最小值为一小时。
+ 设置持续时间以超过源数据库实例的任何可能的停机时间、任何可能的通信时间以及源数据库实例的任何可能的联网问题期间。指定这样的持续时间后，可允许 Oracle GoldenGate 根据需要从源数据库实例恢复日志。
+ 确保您的实例上有足够的文件存储空间。

如果未启用日志保留，或者保留值太小，则将收到类似以下内容的错误消息。

```
2022-03-06 06:17:27  ERROR   OGG-00446  error 2 (No such file or directory) 
opening redo log /rdsdbdata/db/GGTEST3_A/onlinelog/o1_mf_2_9k4bp1n6_.log for sequence 1306 
Not able to establish initial position for begin time 2022-03-06 06:16:55.
```

## Oracle GoldenGate 似乎配置正确，但复制不起作用
<a name="Appendix.OracleGoldenGate.Troubleshooting.Replication"></a>

对于预先存在的表，您必须指定 Oracle GoldenGate 从中运行的 SCN。

**修复此问题**

1. 登录源数据库并启动 Oracle GoldenGate 命令行界面（`ggsci`）。下面的示例说明了登录格式。

   ```
   dblogin userid oggadm1@OGGSOURCE
   ```

1. 使用 `ggsci` 命令行为 `EXTRACT` 进程设置起始 SCN。以下示例为 `EXTRACT` 将 SCN 设置为 223274。

   ```
   ALTER EXTRACT EABC SCN 223274
   start EABC
   ```

1. 登录到目标数据库。下面的示例说明了登录格式。

   ```
   dblogin userid oggadm1@OGGTARGET
   ```

1. 使用 `ggsci` 命令行为 `REPLICAT` 进程设置起始 SCN。以下示例为 `REPLICAT` 将 SCN 设置为 223274。

   ```
   start RABC atcsn 223274
   ```

## 由于 SYS 上的查询，集成 REPLICAT 速度缓慢。"\$1DBA\$1APPLY\$1CDR\$1INFO"
<a name="Appendix.OracleGoldenGate.IR"></a>

Oracle GoldenGate 冲突检测和解决 (CDR) 提供了基本的冲突解决例程。例如，CDR 可以解决 `INSERT` 语句的唯一冲突。

在 CDR 解决冲突时，它可以临时将记录插入异常表 `_DBA_APPLY_CDR_INFO` 中。集成的 `REPLICAT` 稍后会删除这些记录。在极少数情况下，集成的 `REPLICAT` 可以处理大量冲突，但是新的集成 `REPLICAT` 并不能取代它。`_DBA_APPLY_CDR_INFO` 中的现有行不会被删除而是被孤立。任何新的集成 `REPLICAT` 进程都会减慢，因为它们正在查询 `_DBA_APPLY_CDR_INFO` 中的孤立行。

要从 `_DBA_APPLY_CDR_INFO` 中删除所有行，请使用 Amazon RDS 过程 `rdsadmin.rdsadmin_util.truncate_apply$_cdr_info`。此过程是作为 2020 年 10 月版本和补丁程序更新的一部分发布的。以下数据库版本中提供该过程：
+ [版本 21.0.0.0.ru-2022-01.rur-2022-01.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-21-0.html#oracle-version-RU-RUR.21.0.0.0.ru-2022-01.rur-2022-01.r1) 及更高版本
+ [版本 19.0.0.0.ru-2020-10.rur-2020-10.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2020-10.rur-2020-10.r1) 及更高版本

以下示例展示了将表 `_DBA_APPLY_CDR_INFO` 截断。

```
SET SERVEROUTPUT ON SIZE 2000
EXEC rdsadmin.rdsadmin_util.truncate_apply$_cdr_info;
```

# 在 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`。

# 在 Amazon EC2 实例上配置 Oracle Connection Manager
<a name="oracle-cman"></a>

Oracle Connection Manager (CMAN) 是一种代理服务器，可将连接请求转发到数据库服务器或其他代理服务器。您可以使用 CMAN 配置以下内容：

访问控制  
您可以创建规则来筛选掉用户指定的客户端请求并接受其他请求。

会话多路复用  
您可以通过网络连接将多个客户端会话汇集到共享服务器目标。

通常，CMAN 驻留在独立于数据库服务器和客户端主机的主机上。有关更多信息，请参阅 Oracle Database 文档中的[配置 Oracle Connection Manager](https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/configuring-oracle-connection-manager.html#GUID-AF8A511E-9AE6-4F4D-8E58-F28BC53F64E4)。

**Topics**
+ [CMAN 支持的版本和许可选项](#oracle-cman.Versions)
+ [CMAN 的要求和限制](#oracle-cman.requirements)
+ [配置 CMAN](#oracle-cman.configuring-cman)

## CMAN 支持的版本和许可选项
<a name="oracle-cman.Versions"></a>

CMAN 支持 Amazon RDS 支持的所有版本的 Oracle Database Enterprise Edition。有关更多信息，请参阅 [RDS for Oracle 版本](Oracle.Concepts.database-versions.md)。

您可以在安装 Oracle Database 的主机之外的主机上安装 Oracle Connection Manager。运行 CMAN 的主机不需要单独的许可证。

## CMAN 的要求和限制
<a name="oracle-cman.requirements"></a>

为了提供完全托管式体验，Amazon RDS 限制了对操作系统的访问。您无法修改需要操作系统访问权限的数据库参数。因此，Amazon RDS 不支持要求您登录操作系统的 CMAN 功能。

## 配置 CMAN
<a name="oracle-cman.configuring-cman"></a>

配置 CMAN 时，您会在 RDS for Oracle 数据库之外执行大部分工作。

**Topics**
+ [步骤 1：在与 RDS for Oracle 实例相同的 VPC 中的 Amazon EC2 实例上配置 CMAN](#oracle-cman.configuring-cman.vpc)
+ [步骤 2：为 CMAN 配置数据库参数](#oracle-cman.configuring-cman.parameters)
+ [步骤 3：将数据库实例与参数组相关联](#oracle-cman.configuring-cman.parameter-group)

### 步骤 1：在与 RDS for Oracle 实例相同的 VPC 中的 Amazon EC2 实例上配置 CMAN
<a name="oracle-cman.configuring-cman.vpc"></a>

要了解如何设置 CMAN，请按照博客文章《[在 Amazon EC2 上为 Amazon RDS for Oracle 配置和使用 Oracle Connection Manager](https://aws.amazon.com/blogs/database/configuring-and-using-oracle-connection-manager-on-amazon-ec2-for-amazon-rds-for-oracle/)》中的详细说明进行操作。

### 步骤 2：为 CMAN 配置数据库参数
<a name="oracle-cman.configuring-cman.parameters"></a>

对于 CMAN 功能（如 Traffic Director 模式和会话多路复用），请将 `REMOTE_LISTENER` 参数设置为数据库参数组中 CMAN 实例的地址。考虑以下情况：
+ CMAN 实例驻留在具有 IP 地址 `10.0.159.100` 的主机上，并使用端口 `1521`。
+ 数据库 `orcla`、`orclb` 和 `orclc` 位于单独的 RDS for Oracle 数据库实例上。

下表显示了如何设置 `REMOTE_LISTENER` 值。Amazon RDS 自动设置 `LOCAL_LISTENER` 值。


| 数据库实例名称 | 数据库实例 IP | 本地侦听器值（自动设置） | 远程侦听器值（用户设置） | 
| --- | --- | --- | --- | 
| orcla | 10.0.159.200 |  <pre>( address=<br />  (protocol=tcp)<br />  (host=10.0.159.200)<br />  (port=1521)<br />)</pre>  | 10.0.159.100:1521 | 
| orclb | 10.0.159.300 |  <pre>( address=<br />  (protocol=tcp)<br />  (host=10.0.159.300)<br />  (port=1521)<br />)</pre>  | 10.0.159.100:1521 | 
| orclc | 10.0.159.400 |  <pre>( address=<br />  (protocol=tcp)<br />  (host=10.0.159.400)<br />  (port=1521)<br />)</pre>  | 10.0.159.100:1521 | 

### 步骤 3：将数据库实例与参数组相关联
<a name="oracle-cman.configuring-cman.parameter-group"></a>

创建或修改数据库实例，以便使用在 [步骤 2：为 CMAN 配置数据库参数](#oracle-cman.configuring-cman.parameters) 中配置的参数组。有关更多信息，请参阅 [在 Amazon RDS 中将数据库参数组与数据库实例关联](USER_WorkingWithParamGroups.Associating.md)。

# 在 Amazon RDS 上的 Oracle 中安装 Siebel 数据库
<a name="Oracle.Resources.Siebel"></a>

您可以使用 Amazon RDS 将 Siebel 数据库托管在 Oracle 数据库实例上。Siebel 数据库是 Siebel 客户关系管理 (CRM) 应用程序架构的一部分。有关说明，请参阅 [Siebel 业务应用程序的通用架构](https://docs.oracle.com/cd/E63029_01/books/PerformTun/performtun_archinfra.htm#i1043361)。

使用以下主题可帮助在 Amazon RDS 上的 Oracle 数据库实例中设置 Siebel 数据库。您还可以了解如何使用 Amazon Web Services 支持 Siebel CRM 应用程序架构所需的其他组件。

**注意**  
要在 Amazon RDS 上的 Oracle 中安装 Siebel 数据库，您需要使用主用户账户。您无需 `SYSDBA` 权限；主用户权限就已足够。有关更多信息，请参阅“[主用户账户权限](UsingWithRDS.MasterAccounts.md)”。

## 许可和版本
<a name="Oracle.Resources.Siebel.Versions"></a>

要在 Amazon RDS 上安装 Siebel 数据库，您必须使用自己的 Oracle Database 许可和 Siebel 许可。您必须拥有与数据库实例类和 Oracle Database 版本对应的 Oracle Database 许可 (及软件更新授权和支持)。有关更多信息，请参阅“[RDS for Oracle 许可选项](Oracle.Concepts.Licensing.md)”。

Oracle Database Enterprise Edition 是 Siebel 针对此场景发布的唯一认证版本。Amazon RDS 支持 Siebel CRM 15.0 版或 16.0 版。

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

## 开始前的准备工作
<a name="Oracle.Resources.Siebel.BeforeYouBegin"></a>

在开始之前，您需要 Amazon VPC。由于您的 Amazon RDS 数据库实例仅需要在 Siebel Enterprise Server (而非公共 Internet) 上可用，因此您的 Amazon RDS 数据库实例将托管在私有子网上，以便提高安全性。有关如何创建 Amazon VPC，从而与 Siebel CRM 配合使用的信息，请参阅 [创建并连接到 Oracle 数据库实例](CHAP_GettingStarted.CreatingConnecting.Oracle.md)。

在开始之前，您还需要 Oracle 数据库实例。有关如何创建用于 Siebel CRM 的 Oracle 数据库实例的信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

## 安装并配置 Siebel 数据库
<a name="Oracle.Resources.Siebel.Database.Siebel"></a>

创建 Oracle 数据库实例后，您可以安装 Siebel 数据库。您可以通过以下方法安装数据库：创建表所有者和管理员账户，安装存储的过程功能，然后运行 Siebel 数据库配置向导。有关更多信息，请参阅[在 RDBMS 上安装 Siebel 数据库](https://docs.oracle.com/cd/E63029_01/books/SiebInstWIN/SiebInstCOM_ConfigDB.html)。

要运行 Siebel 数据库配置向导，您需要使用主用户账户。您无需 `SYSDBA` 权限；主用户权限就已足够。有关更多信息，请参阅“[主用户账户权限](UsingWithRDS.MasterAccounts.md)”。

## 将其他 Amazon RDS 功能与 Siebel 数据库结合使用
<a name="Oracle.Resources.Siebel.Miscellaneous"></a>

创建 Oracle 数据库实例后，可使用其他 Amazon RDS 功能来帮助您自定义 Siebel 数据库。

### 使用 Oracle Statspack 选项收集统计信息
<a name="Oracle.Resources.Siebel.Options"></a>

您可以通过使用数据库选项组中的选项向数据库实例添加各项功能。创建 Oracle 数据库实例时，您使用了默认的数据库选项组。如果要向数据库添加功能，您可以为数据库实例创建新的选项组。

如果要收集关于 Siebel 数据库的性能统计数据，您可以添加 Oracle Statspack 功能。有关更多信息，请参阅“[Oracle Statspack](Appendix.Oracle.Options.Statspack.md)”。

有些选项更改将立即应用，另一些选项更改将在数据库实例的下一维护时段内应用。有关更多信息，请参阅“[使用选项组](USER_WorkingWithOptionGroups.md)”。创建自定义选项组后，请修改数据库实例以附加选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

### 使用参数优化性能
<a name="Oracle.Resources.Siebel.Parameters"></a>

您可以使用数据库参数组中的参数来管理数据库引擎配置。创建 Oracle 数据库实例时，您使用了默认的数据库参数组。如果要自定义数据库配置，您可以为数据库实例创建一个新的参数组。

更改参数时，更改可以立即生效，也可以在手动重新启动数据库实例后生效，具体取决于参数类型。有关更多信息，请参阅“[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)”。创建自定义参数组后，请修改数据库实例以附加参数组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

要针对 Siebel CRM 优化 Oracle 数据库实例，您可以自定义某些参数。下表显示了一些推荐的参数设置。有关 Siebel CRM 性能优化的更多信息，请参阅 [Siebel CRM 性能优化指南](https://docs.oracle.com/cd/E63029_01/books/PerformTun/toc.htm)。


****  

| 参数名称 | 默认值 | 最佳 Siebel CRM 性能指南 | 
| --- | --- | --- | 
| \$1always\$1semi\$1join | `CHOOSE` | `OFF`  | 
| \$1b\$1tree\$1bitmap\$1plans | `TRUE` | `FALSE`  | 
| \$1like\$1with\$1bind\$1as\$1equality | `FALSE` | `TRUE`  | 
| \$1no\$1or\$1expansion | `FALSE` | `FALSE`  | 
| \$1optimizer\$1join\$1sel\$1sanity\$1check | `TRUE` | `TRUE`  | 
| \$1optimizer\$1max\$1permutations | 2000 | 100  | 
| \$1optimizer\$1sortmerge\$1join\$1enabled | `TRUE` | `FALSE`  | 
| \$1partition\$1view\$1enabled | `TRUE` | `FALSE`  | 
| open\$1cursors | `300` | 至少 **2000**。  | 

### 创建快照
<a name="Oracle.Resources.Siebel.Snapshots"></a>

创建 Siebel 数据库后，您可以使用 Amazon RDS 的快照功能来复制数据库。有关更多信息，请参阅“[为 Amazon RDS 的单可用区数据库实例创建数据库快照](USER_CreateSnapshot.md)”和“[还原到数据库实例](USER_RestoreFromSnapshot.md)”。

## 对其他 Siebel CRM 组件的支持
<a name="Oracle.Resources.Siebel.OtherComponents"></a>

除了 Siebel 数据库以外，您还可以使用 Amazon Web Services 来支持 Siebel CRM 应用程序架构的其他组件。可在下表中找到有关 Amazon AWS 为其他 Siebel CRM 组件提供的支持的更多信息。


****  

| Siebel CRM 组件 | Amazon AWS Support | 
| --- | --- | 
| Siebel Enterprise (配备一个或多个 Siebel 服务器)  |  您可以在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上托管 Siebel 服务器。您可以根据需要使用 Amazon EC2 启动任意数量的虚拟服务器。利用 Amazon EC2，您可以轻松进行向上扩展或向下扩展，以便应对需求变化。有关更多信息，请参阅[什么是 Amazon EC2？](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)  您可以将服务器与数据库实例放置在同一 VPC 中，并使用 VPC 安全组来访问数据库。有关更多信息，请参阅“[在 VPC 中使用数据库实例](USER_VPC.WorkingWithRDSInstanceinaVPC.md)”。  | 
| Web 服务器 (配备 Siebel Web 服务器扩展)  |  您可以在多个 EC2 实例上安装多个 Web 服务器。然后，您可以使用 Elastic Load Balancing 在实例之间分发传入流量。有关更多信息，请参阅[什么是 Elastic Load Balancing？](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/elastic-load-balancing.html)。  | 
| Siebel 网关名称服务器 |  您可以在 EC2 实例上托管 Siebel 网关名称服务器。然后，您可以将服务器与数据库实例放置在同一 VPC 中，并使用 VPC 安全组访问数据库。有关更多信息，请参阅“[在 VPC 中使用数据库实例](USER_VPC.WorkingWithRDSInstanceinaVPC.md)”。  | 