在 RDS for Oracle 中使用 CDB - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 RDS for Oracle 中使用 CDB

在 Oracle 多租户架构中,容器数据库(CDB)可以包括客户创建的可插拔数据库(PDB)。有关 CDB 的更多信息,请参阅 Oracle 数据库文档中的多租户架构简介

RDS for Oracle CDB 概述

运行 Oracle Database 19c 或更高版本时,您可以将 RDS for Oracle 数据库实例创建为容器数据库(CDB)。CDB 不同于非 CDB,因为它可以包含可插拔数据库(PDB)。PDB 是模式和对象的可移植集合,在应用程序看来是单独的数据库。

从 Oracle Database 21c 开始,所有数据库都是 CDB。如果您的数据库实例运行 Oracle Database 19c,则可以创建 CDB 或非 CDB。非 CDB 使用传统的 Oracle 数据库架构,不能包含 PDB。您可以将 Oracle Database 19c 非 CDB 转换为 CDB,但不能将 CDB 转换为非 CDB。您只能将 CDB 升级到 CDB。

单租户配置

RDS for Oracle 支持 Oracle 多租户架构的单租户配置。这意味着 RDS for Oracle 数据库实例只能包含一个 PDB。在创建数据库实例时命名 PDB。CDB 名称原定设置为 RDSCDB 且无法更改。

在 RDS for Oracle 中,您的客户端应用程序与 PDB 交互,而不是与 CDB 交互。使用 PDB 的体验基本上与使用非 CDB 的体验相同。您在单租户配置中使用的 Amazon RDS API 与在非 CDB 架构中使用的相同。您无法访问 CDB 本身。

CDB 中的创建和转换选项

尽管 Oracle Database 21c 仅支持 CDB,但 Oracle Database 19c 同时支持 CDB 和非 CDB。下表显示了用于创建和转换 CDB 和非 CDB 的不同选项。

版本 数据库创建选项 架构转换选项 主要版本升级目标
Oracle Database 21c 仅 CDB 不适用 不适用
Oracle Database 19c CDB 或非 CDB 非 CDB 至 CDB(2021 年 4 月 RU 或更高版本) 21c CDB(仅限从 19c CDB)
Oracle Database 12c(不支持) 仅限非 CDB 不适用 19c 非 CDB

如上表所示,在新的主要版本中,您不能直接将非 CDB 升级到 CDB。但您可以将 Oracle Database 19c 非 CDB 转换为 Oracle Database 19c CDB,然后将 Oracle Database 19c CDB 升级为 Oracle Database 21c CDB。有关更多信息,请参阅将 RDS for Oracle 非 CDB 转换为 CDB

CDB 中的用户账户和权限

在 Oracle 多租户架构中,所有用户账户都是普通用户本地用户。CDB 普通用户是指在 CDB 根目录和每个现有和将来的 PDB 中已知单个身份和密码的数据库用户。相比之下,本地用户只存在于单个 PDB 中。

RDS 主用户是 PDB 中的本地用户账户,这是您在创建数据库实例时命名的。如果您创建新的用户账户,这些用户也将成为位于 PDB 中的本地用户。您不能使用任何用户账户创建新的 PDB 或修改现有 PDB 的状态。

rdsadmin 用户是普通用户账户。您可以运行此账户中存在的 RDS for Oracle 软件包,但无法以 rdsadmin 的身份登录。有关详细信息,请参阅 Oracle 文档中的关于普通用户和本地用户

CDB 中的参数组系列

CDB 有其自己的参数类系列和原定设置参数值。CDB 参数组系列如下所示:

  • oracle-ee-cdb-21

  • oracle-se2-cdb-21

  • oracle-ee-cdb-19

  • oracle-se2-cdb-19

您可以在 CDB 级别而不是 PDB 级别指定参数。PDB 继承 CDB 的参数设置。有关设置参数的更多信息,请参阅 使用参数组。有关最佳实践,请参阅 使用数据库参数组

CDB 中的 PDB 可移植性

您的 CDB 只能包含单个 PDB。您无法拔下此 PDB 或插入其他 PDB。要将数据移入或移出 CDB,请使用与非 CDB 相同的方法。有关迁移数据的更多信息,请参阅将数据导入到 Amazon RDS 上的 Oracle

配置 RDS for Oracle CDB

配置 CDB 与配置非 CDB 类似。

创建 RDS for Oracle CDB 实例

在 RDS for Oracle 中,创建 CDB 与创建非 CDB 几乎完全相同。不同之处在于,您在创建数据库实例时选择了多租户架构。要创建 CDB,请使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API。

创建 CDB 实例
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在 Amazon RDS 控制台的右上角,选择要在其中创建 CDB 实例的 Amazon Web Services 区域。

  3. 在导航窗格中,选择 Databases (数据库)

  4. 选择创建数据库

  5. 选择数据库创建方法中,选择标准创建

  6. 引擎选项下面,选择 Oracle

  7. 对于数据库管理类型,选择 Amazon RDS

  8. 对于架构设置,选择多租户架构

  9. 根据数据库实例的设置中列出的选项选择所需的设置。请注意以下几点:

    • 主用户名中,输入 PDB 中本地用户的名称。您不能使用主用户名登录 CDB 根目录。

    • 对于初始数据库名称,输入 PDB 的名称。您不能命名 CDB,它具有原定设置名称 RDSCDB

  10. 选择 Create database(创建数据库)。

要使用 Amazon CLI 创建数据库实例,请使用以下参数调用 create-db-instance 命令:

  • --db-instance-identifier

  • --db-instance-class

  • --engine { oracle-ee-cdb | oracle-se2-cdb }

  • --master-username

  • --master-user-password

  • --allocated-storage

  • --backup-retention-period

有关每项设置的信息,请参阅 数据库实例的设置

以下示例创建一个名为 my-cdb-inst 的 RDS for Oracle 数据库实例。PDB 命名为 mypdb

对于 Linux、macOS 或 Unix:

aws rds create-db-instance \ --engine oracle-ee-cdb \ --db-instance-identifier my-cdb-inst \ --db-name mypdb \ --allocated-storage 250 \ --db-instance-class db.t3.large \ --master-username pdb_admin \ --master-user-password masteruserpassword \ --backup-retention-period 3

对于 Windows:

aws rds create-db-instance ^ --engine oracle-ee-cdb ^ --db-instance-identifier my-cdb-inst ^ --db-name mypdb ^ --allocated-storage 250 ^ --db-instance-class db.t3.large ^ --master-username pdb_admin ^ --master-user-password masteruserpassword ^ --backup-retention-period 3
注意

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

此命令生成类似于下述信息的输出。

{ "DBInstance": { "DBInstanceIdentifier": "my-cdb-inst", "DBInstanceClass": "db.t3.large", "Engine": "oracle-ee-cdb", "DBInstanceStatus": "creating", "MasterUsername": "pdb_user", "DBName": "MYPDB", "AllocatedStorage": 250, "PreferredBackupWindow": "04:59-05:29", "BackupRetentionPeriod": 3, "DBSecurityGroups": [], "VpcSecurityGroups": [ { "VpcSecurityGroupId": "sg-0a2bcd3e", "Status": "active" } ], "DBParameterGroups": [ { "DBParameterGroupName": "default.oracle-ee-cdb-19", "ParameterApplyStatus": "in-sync" } ], "DBSubnetGroup": { "DBSubnetGroupName": "default", "DBSubnetGroupDescription": "default", "VpcId": "vpc-1234567a", "SubnetGroupStatus": "Complete", ...

要使用 Amazon RDS API 创建数据库实例,请调用 CreateDBInstance 操作。

有关每项设置的信息,请参阅 数据库实例的设置

在 RDS for Oracle CDB 中连接到 PDB

您可以使用像 SQL*Plus 这样的实用程序连接到 PDB。要下载包含独立版本 SQL*Plus 的 Oracle 即时客户端,请参阅 Oracle 即时客户端下载

要将 SQL*Plus 连接到 PDB,您需要以下信息:

  • 数据库用户名和密码

  • 您的数据库实例的端点

  • 端口号

有关查找上述信息的信息,请参阅查找 RDS for Oracle 数据库实例的端点

例 使用 SQL*Plus 连接到您的 PDB

在以下示例中,用您的主用户替换 master_user_name。另外,请将端点替换为您的数据库实例,然后包含端口号和 Oracle SID。SID 值是您在创建数据库实例时指定的 PDB 的名称,而不是数据库实例标识符。

对于 Linux、macOS 或 Unix:

sqlplus 'master_user_name@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=endpoint)(PORT=port))(CONNECT_DATA=(SID=pdb_name)))'

对于 Windows:

sqlplus master_user_name@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=endpoint)(PORT=port))(CONNECT_DATA=(SID=pdb_name)))

您应该可以看到类似于如下所示的输出内容。

SQL*Plus: Release 19.0.0.0.0 Production on Mon Aug 21 09:42:20 2021

在您输入用户的密码之后,将出现 SQL 提示。

SQL>
注意

较短格式连接字符串 (Easy connect 或 EZCONNECT) (如 sqlplus username/password@LONGER-THAN-63-CHARS-RDS-ENDPOINT-HERE:1521/database-identifier) 可能会遇到最大字符限制,不应用于连接。

备份和还原 CDB

数据库快照在多租户和非多租户架构中的工作方式相同。唯一的区别是,还原数据库快照时,只能对 PDB 进行重命名,而不能对 CDB 进行重命名。必须将 CDB 命名为 RDSCDB。有关更多信息,请参阅Oracle Database 注意事项

将 RDS for Oracle 非 CDB 转换为 CDB

您可以将 Oracle 数据库的架构从传统的非 CDB 架构更改为多租户架构。升级数据库引擎版本时,不能在同一操作中更改数据库架构。因此,要将 Oracle Database 19c 非 CDB 升级到 Oracle Database 21c CDB,您首先需要将非 CDB 转换为 CDB,然后将 19c CDB 升级到 21c CDB。

非 CDB 转换操作有以下要求:

  • 确保为引擎类型指定 oracle-ee-cdboracle-se2-cdb。只支持这两个值。

  • 确保您的数据库引擎运行具有 2021 年 4 月或更高版本 RU 的 Oracle Database 19c。

该操作具有以下限制:

  • 您无法将 CDB 转换为非 CDB。您只能将非 CDB 转换为 CDB。

  • 您无法转换启用了 Oracle Data Guard 的主数据库或副本数据库。

  • 您无法在同一操作中升级数据库引擎版本,并将非 CDB 转换为 CDB。

  • 选项和参数组的注意事项与升级数据库引擎的注意事项相同。有关更多信息,请参阅Oracle 数据库升级注意事项

将非 CDB 转换为 CDB
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在 Amazon RDS 控制台的右上角,选择数据库实例所在的 Amazon Web Services 区域。

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

  4. 选择 Modify(修改)。

  5. 对于架构设置,选择多租户架构

  6. (可选)对于数据库参数组,请为您的 CDB 实例选择一个新的参数组。转换数据库实例时和升级数据库实例时,适用的参数组注意事项相同。有关更多信息,请参阅参数组注意事项

  7. (可选)对于选项组,为 CDB 实例选择一个新的选项组。转换数据库实例时和升级数据库实例时,适用的选项组注意事项相同。有关更多信息,请参阅选项组注意事项

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

  9. (可选)选择立即应用以立即应用更改。选择此选项在某些情况下可能导致停机。有关更多信息,请参阅“使用“立即应用”设置”。

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

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

要将数据库实例上的非 CDB 转换为 CDB,请在 Amazon CLI 命令 modify-db-instance 中将 --engine 设置为 oracle-ee-cdboracle-se2-cdb

以下示例转换名为 my-non-cdb 的数据库实例,并指定自定义选项组和参数组。

对于 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

对于 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

要将非 CDB 转换为 CDB,请在 RDS API 操作 ModifyDBInstance 中指定 Engine

升级 CDB

您可以将 CDB 升级到其他 Oracle 数据库版本。例如,您可以将 Oracle Database 19c CDB 升级为 Oracle Database 21c CDB。在升级期间,您无法更改数据库架构。因此,您不能将非 CDB 升级为 CDB 或将 CDB 升级为非 CDB。

将 CDB 升级为 CDB 的过程与将非 CDB 升级为非 CDB 的过程相同。有关更多信息,请参阅升级 RDS for Oracle 数据库引擎