

# 将 RDS for Oracle 非 CDB 转换为 CDB
<a name="oracle-cdb-converting"></a>

您可以使用 `modify-db-instance` 命令将 Oracle 数据库的架构从非 CDB 架构更改为 Oracle 多租户架构，也称为 *CDB 架构*。在大多数情况下，这种方法比创建新的 CDB 并导入数据更可取。转换操作会导致停机。

升级数据库引擎版本时，不能在同一操作中更改数据库架构。因此，要将 Oracle Database 19c 非 CDB 升级到 Oracle Database 21c CDB，您首先需要执行一个步骤来将非 CDB 转换为 CDB，然后再执行一个步骤来将 19c CDB 升级到 21c CDB。

非 CDB 转换操作有以下要求：
+ 必须为数据库引擎类型指定 `oracle-ee-cdb` 或 `oracle-se2-cdb`。只支持这两个值。
+ 您的数据库引擎必须使用具有 2021 年 4 月或更高版本的版本更新（RU）的 Oracle Database 19c。

该操作具有以下限制：
+ 您无法将 CDB 转换为非 CDB。您只能将非 CDB 转换为 CDB。
+ 您无法通过单次 `modify-db-instance` 调用将非 CDB 转换为多租户配置。将非 CDB 转换为 CDB 后，您的 CDB 将处于单租户配置。要将单租户配置转换为多租户配置，请再次运行 `modify-db-instance`。有关更多信息，请参阅 [将单租户配置转换为多租户配置](oracle-single-tenant-converting.md)。
+ 您无法转换启用了 Oracle Data Guard 的主数据库或副本数据库。要转换具有只读副本的非 CDB，请先删除所有只读副本。
+ 您无法在同一操作中升级数据库引擎版本，并将非 CDB 转换为 CDB。

转换非 CDB 前，请考虑以下事项：
+ 选项和参数组的注意事项与升级数据库引擎的注意事项相同。有关更多信息，请参阅 [Oracle 数据库升级注意事项](USER_UpgradeDBInstance.Oracle.OGPG.md)。
+ 您可以在单个操作中将使用托管式主密码的现有非 CDB 实例转换为单租户实例。单租户实例继承托管式密码。
+ 如果数据库实例安装了 `OEMAGENT` 选项，则最佳实践是在转换非 CDB 之前移除此选项。在非 CDB 转换为 CDB 之后，请重新安装该选项。有关更多信息，请参阅 [适用于 Enterprise Manager Cloud Control 的 Oracle Management Agent](Oracle.Options.OEMAgent.md)。
+ 在转换过程中，RDS 将联机重做日志大小重置为默认的 128M。

## 控制台
<a name="oracle-cdb-converting.console"></a>

**将非 CDB 转换为 CDB**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在 Amazon RDS 控制台的右上角，选择数据库实例所在的 AWS 区域。

1. 在导航窗格中，选择**数据库**，然后选择要转换为 CDB 实例的非 CDB 实例。

1. 选择 **Modify**(修改)。

1. 对于**架构设置**，选择 **Oracle 多租户架构**。转换后，您的 CDB 将处于单租户配置。

1. （可选）对于**数据库参数组**，请为您的 CDB 实例选择一个新的参数组。转换数据库实例时和升级数据库实例时，适用的参数组注意事项相同。有关更多信息，请参阅 [参数组注意事项](USER_UpgradeDBInstance.Oracle.OGPG.md#USER_UpgradeDBInstance.Oracle.OGPG.PG)。

1. (可选）对于**选项组**，为 CDB 实例选择一个新的选项组。转换数据库实例时和升级数据库实例时，适用的选项组注意事项相同。有关更多信息，请参阅 [选项组注意事项](USER_UpgradeDBInstance.Oracle.OGPG.md#USER_UpgradeDBInstance.Oracle.OGPG.OG)。

1. （可选）对于**凭证管理**，请选择**在 AWS Secrets Manager 中管理**或**自行管理**。有关更多信息，请参阅 [使用 Secrets Manager 管理数据库实例的主用户密码](rds-secrets-manager.md#rds-secrets-manager-db-instance)。

1. 当所有更改都达到您的要求时，选择**继续**并查看修改摘要。

1. （可选）选择**立即应用**以立即应用更改。选择此选项在某些情况下可能导致停机。有关更多信息，请参阅“[使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)”。

1. 在确认页面上，检查您的更改。如果更改正确无误，请选择**修改数据库实例**。

   也可以选择 **Back (返回)** 编辑您的更改，或选择 **Cancel (取消)** 取消更改。

## AWS CLI
<a name="oracle-cdb-converting.cli"></a>

要将数据库实例上的非 CDB 转换为采用单租户配置的 CDB，请在 AWS CLI 命令 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 中将 `--engine` 设置为 `oracle-ee-cdb` 或 `oracle-se2-cdb`。有关更多信息，请参阅 [数据库实例的设置](USER_ModifyInstance.Settings.md)。

以下示例转换名为 *my-non-cdb* 的数据库实例，并指定自定义选项组和参数组。该命令还支持使用 Secrets Manager 管理密码。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier my-non-cdb \
    --engine oracle-ee-cdb \
    --option-group-name custom-option-group \
    --db-parameter-group-name custom-parameter-group \
    --manage-master-user-password
```
对于 Windows：  

```
aws rds modify-db-instance ^
    --db-instance-identifier my-non-cdb ^
    --engine oracle-ee-cdb ^
    --option-group-name custom-option-group ^
    --db-parameter-group-name custom-parameter-group ^
    --manage-master-user-password
```

## RDS API
<a name="oracle-cdb-converting.api"></a>

要将非 CDB 转换为 CDB，请在 RDS API 操作 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 中指定 `Engine`。