为 Amazon RDS Custom for Oracle 升级数据库实例 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为 Amazon RDS Custom for Oracle 升级数据库实例

您可以通过修改 Amazon RDS Custom 数据库实例以使用新的自定义引擎版本 (CEV) 来升级该实例。有关升级的一般信息,请参阅升级数据库实例引擎版本

RDS Custom for Oracle 升级概述

使用 RDS Custom for Oracle,您可以创建新的 CEV,然后将您的实例修改为使用新的 CEV,以此修补您的 Oracle 数据库或数据库实例操作系统(OS)。

CEV 升级选项

当您创建 CEV 以进行升级时,可以选择以下互斥的选项:

仅限数据库

重复使用数据库实例当前所使用的亚马逊机器映像(AMI),但要指定不同的数据库二进制文件。RDS Custom 会分配一个新的二进制卷,然后将其附加到现有的 Amazon EC2 实例。RDS Custom 用使用目标数据库版本的新卷替换整个数据库卷。

仅限操作系统

重复使用数据库实例当前所使用的数据库二进制文件,但要指定不同的 AMI。RDS Custom 会分配一个新的 Amazon EC2 实例,然后将现有二进制卷附加到新实例。保留现有的数据库卷。

如果要同时升级操作系统和数据库,则必须升级 CEV 两次。您可以先升级操作系统后再升级数据库,也可以先升级数据库后再升级操作系统。

警告

修补操作系统时,会丢失根卷数据和任何现有的操作系统自定义项。因此,我们强烈建议您不要使用根卷来进行安装或存储永久数据或文件。我们还建议您在升级之前先备份数据。

在没有 CEV 的情况下进行修补

我们强烈建议您使用 CEV 升级 RDS Custom for Oracle 数据库实例。RDS Custom for Oracle 自动化可将补丁元数据与数据库实例上的数据库二进制文件同步。

在特殊情况下,RDS Custom 支持使用 OPatch 实用工具将“一次性”数据库补丁直接应用于底层 Amazon EC2 实例。有效的使用案例可能是您想要立即应用的数据库补丁,但 RDS Custom 团队正在升级 CEV 功能,这会导致延迟。要手动应用数据库补丁,请执行以下步骤:

  1. 暂停 RDS Custom 自动化。

  2. 将您的补丁应用于 Amazon EC2 实例上的数据库二进制文件。

  3. 恢复 RDS Custom 自动化。

上述技术的缺点是必须手动将数据库补丁应用到要升级的每个实例。相比之下,当您创建新的 CEV 时,您可以使用相同的 CEV 创建或升级多个数据库实例。

使用 CEV 修补数据库实例的一般步骤

无论您修补操作系统还是数据库,请执行以下基本步骤:

  1. 创建包含以下任一内容的 CEV,具体取决于您要修补数据库还是操作系统:

    • 要应用于数据库实例的 Oracle 数据库 RU

    • 不同的 AMI(最新的 AMI,或是您指定的 AMI),以及一个用作源的现有 CEV

    按照 创建 CEV 中的步骤操作。

  2. (对于数据库修补为可选)通过运行 describe-db-engine-versions 来检查可用的引擎版本升级。

  3. 通过运行 modify-db-instance 启动修补过程。

    正在修补的实例的状态不同,如下所示:

    • 当 RDS 修补数据库时,数据库实例的状态将更改为正在升级

    • 当 RDS 修补操作系统时,数据库实例的状态将更改为正在修改

    当数据库实例的状态为可用时,修补已完成。

  4. 通过运行 describe-db-instances 来确认您的数据库实例使用的是新 CEV。

RDS Custom for Oracle 升级的要求

在将您的 RDS Custom for Oracle 数据库实例升级到目标 CEV 时,请确保满足以下要求:

  • 要升级到的目标 CEV 必须存在。

  • 您必须以单个操作升级操作系统或数据库。不支持在单个 API 调用中同时升级操作系统和数据库。

  • 目标 CEV 必须使用当前 CEV 清单中的安装参数设置。例如,您无法将使用默认 Oracle 主目录的数据库升级到使用非默认 Oracle 主目录的 CEV。

  • 对于数据库升级,目标 CEV 必须使用新的次要数据库版本,而不是新的主要版本。例如,您无法从 Oracle Database 12c CEV 升级到 Oracle Database 19c CEV。但是,您可以从版本 21.0.0.0.ru-2023-04.rur-2023-04.r1 版本升级到版本 21.0.0.0.ru-2023-07.rur-2023-07.r1。

  • 对于操作系统升级,目标 CEV 必须使用不同的 AMI,但具有相同的主要版本。

RDS Custom for Oracle 数据库升级的注意事项

如果您计划升级数据库,请考虑以下事项:

  • 当您升级主数据库实例中的数据库二进制文件时,RDS Custom for Oracle 会自动升级您的只读副本。升级操作系统时,必须手动升级只读副本。

  • 在将容器数据库(CDB)升级为新的数据库版本时,RDS Custom for Oracle 会检查所有 PDB 是否已打开或是否能够打开。如果不满足这些条件,RDS Custom 会停止检查并将数据库返回到其原始状态,而无需尝试升级。如果满足条件,RDS Custom 首先修补 CDB 根目录,然后并行修补所有其他 PDB(包括 PDB$SEED)。

    完成修补后,RDS Custom 会尝试打开所有 PDB。如果任何 PDB 无法打开,则会收到以下事件:The following PDBs failed to open: list-of-PDBs。如果 RDS Custom 无法修补 CDB 根目录或任何 PDB,则实例将进入 PATCH_DB_FAILED 状态。

  • 您可能需要同时执行主要数据库版本升级和将非 CDB 转换为 CDB。在这种情况下,我们建议您按以下步骤操作:

    1. 创建一个使用 Oracle 多租户架构的新 RDS Custom for Oracle 数据库实例。

    2. 将非 CDB 插入 CDB 根目录,将其创建为 PDB。确保非 CDB 与您的 CDB 是相同的主要版本。

    3. 通过运行 noncdb_to_pdb.sql Oracle SQL 脚本来转换您的 PDB。

    4. 验证您的 CDB 实例。

    5. 升级 CDB 实例。

RDS Custom for Oracle 操作系统升级的注意事项

在计划操作系统升级时,请考虑以下事项:

  • 您不能提供自己的 AMI 以在 RDS Custom for Oracle CEV 中使用。您可以指定默认的 AMI,也可以指定 RDS Custom for Oracle CEV 以前使用过的 AMI。

    注意

    当发现常见脆弱性和漏洞时,RDS Custom for Oracle 会发布新的默认 AMI。没有固定的时间表可用或可保证。RDS Custom for Oracle 往往每 30 天发布一次新的默认 AMI。

  • 当您升级主数据库实例中的操作系统时,必须手动升级其关联的只读副本。

  • 请在开始修补操作系统之前,为可用区中的实例类型预留足够的 Amazon EC2 计算容量。

    创建容量预留时,您需要指定可用区、实例数量和实例属性(包括实例类型)。例如,如果数据库实例使用底层 EC2 实例类型 r5.large,我们建议您在可用区中为 r5.large 预留 EC2 容量。在操作系统修补期间,RDS Custom 会创建一个类型为 db.r5.large 的新主机,如果可用区缺少用于该实例类型的 EC2 容量,则该主机可能会卡顿。如果您预留 EC2 容量,则可以降低因容量限制而导致修补受阻的风险。有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的按需容量预留

  • 在升级操作系统之前,请对数据库实例进行备份。升级会删除您的根卷数据和任何现有的操作系统自定义项。

  • 在责任共担模型中,您有责任使操作系统保持最新状态。RDS Custom for Oracle 不强制要求您将哪些补丁应用于您的操作系统。如果您的 RDS Custom for Oracle 功能正常,则可以无限期地使用与此 CEV 关联的 AMI。

查看 RDS Custom for Oracle 数据库实例的有效 CEV 升级目标

您可以在 Amazon Web Services Management Console 中的 Custom engine version(自定义引擎版本)页面中查看现有的 CEV。

您也可以使用 describe-db-engine-versions Amazon CLI 命令查找适用于数据库实例升级的有效 CEV,如以下示例所示。此示例假设您使用引擎版本 19.my_cev1 创建了数据库实例,并且升级版本 19.my_cev219.my_cev 存在。

aws rds describe-db-engine-versions --engine custom-oracle-ee --engine-version 19.my_cev1

输出与以下内容类似。ImageId 字段显示 AMI ID。

{ "DBEngineVersions": [ { "Engine": "custom-oracle-ee", "EngineVersion": "19.my_cev1", ... "Image": { "ImageId": "ami-2345", "Status": "active" }, "DBEngineVersionArn": "arn:aws:rds:us-west-2:123456789012:cev:custom-oracle-ee/19.my_cev1/12a34b5c-67d8-90e1-2f34-gh56ijk78lm9" "ValidUpgradeTarget": [ { "Engine": "custom-oracle-ee", "EngineVersion": "19.my_cev2", "Description": "19.my_cev2 description", "AutoUpgrade": false, "IsMajorVersionUpgrade": false }, { "Engine": "custom-oracle-ee", "EngineVersion": "19.my_cev3", "Description": "19.my_cev3 description", "AutoUpgrade": false, "IsMajorVersionUpgrade": false } ] ...

升级 RDS Custom for Oracle 数据库实例

要升级您的 RDS Custom for Oracle 数据库实例,请将其修改为使用新的 CEV。此 CEV 可以包含新的数据库二进制文件或新的 AMI。如果要升级数据库和操作系统,则必须分别执行两次升级。

注意

如果升级数据库,RDS Custom 会在升级主数据库实例后自动升级只读副本。如果升级操作系统,则必须手动升级副本。

开始之前,请查看 RDS Custom for Oracle 升级的要求RDS Custom for Oracle 数据库升级的注意事项

升级 RDS Custom for Oracle 数据库实例
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择数据库,然后选择要升级的 RDS Custom for Oracle 数据库实例。

  3. 选择修改。将显示修改数据库实例页面。

  4. 对于数据库引擎版本,请选择新的 CEV。执行以下操作:

    • 如果您要修补数据库,请确保 CEV 指定的数据库二进制文件与数据库实例所用的二进制文件不同,并且不指定与数据库实例当前所用 AMI 不同的 AMI。

    • 如果您要修补操作系统,请确保 CEV 指定的 AMI 与数据库实例当前所用的 AMI 不同,并且不指定不同的数据库二进制文件。

      警告

      修补操作系统时,会丢失根卷数据和任何现有的操作系统自定义项。

  5. 请选择 Continue(继续),以查看修改摘要。

    请选择 Apply immediately(立即应用)以立即应用更改。

  6. 如果更改正确无误,请选择 Modify DB Instance(修改数据库实例)。也可以选择 Back (返回) 编辑您的更改,或选择 Cancel (取消) 取消更改。

以下示例显示了可能的升级方案。这些示例假设您创建了具有以下特征的 RDS Custom for Oracle 数据库实例:

  • 数据库实例名为 my-custom-instance

  • CEV 名为 19.my_cev1

  • 使用非 CDB 架构的 Oracle Database 19c

  • 使用 AMI ami-1234 的 Oracle Linux 7.9

提供最新服务的 AMI 是 ami-2345。您可以通过运行 CLI 命令 describe-db-engine-versions 找到您的 AMI:

升级操作系统

在本示例中,您要将 ami-1234 升级到 ami-2345,即提供最新服务的 AMI。由于这是操作系统升级,所以 ami-1234ami-2345 的数据库二进制文件必须相同。您可以基于 19.my_cev1 创建一个名为 19.my_cev2 的新 CEV。

对于 Linux、macOS 或 Unix:

aws rds create-custom-db-engine-version \ --engine custom-oracle-ee \ --engine-version 19.my_cev2 \ --description "Non-CDB CEV based on ami-2345" \ --kms-key-id key-name \ --source-custom-db-engine-version-identifer arn:aws:rds:us-west-2:123456789012:cev:custom-oracle-ee/19.my_cev1/12345678-ab12-1234-cde1-abcde123456789 \ --image-id ami-2345

对于 Windows:

aws rds create-custom-db-engine-version ^ --engine custom-oracle-ee ^ --engine-version 19.my_cev2 ^ --description "Non-CDB CEV based on ami-2345" ^ --kms-key-id key-name ^ --source-custom-db-engine-version-identifer arn:aws:rds:us-west-2:123456789012:cev:custom-oracle-ee/19.my_cev1/12345678-ab12-1234-cde1-abcde123456789 ^ --image-id ami-2345

要升级 RDS Custom 数据库实例,请使用带有下列参数的 modify-db-instance Amazon CLI 命令:

  • --db-instance-identifier – 指定要升级的 RDS Custom for Oracle 数据库实例。

  • --engine-version – 指定具有新 AMI 的 CEV。

  • --no-apply-immediately | --apply-immediately – 指定是立即执行升级还是等到计划的维护时段

以下示例将 my-custom-instance 升级到版本 19.my_cev2。只升级了操作系统。

对于 Linux、macOS 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --engine-version 19.my_cev2 \ --apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier my-custom-instance ^ --engine-version 19.my_cev2 ^ --apply-immediately

升级数据库

在此示例中,您希望将 Oracle 补丁 p35042068 应用到 RDS for Oracle 数据库实例。由于您在升级操作系统中升级了操作系统,因此您的数据库实例当前正在使用 19.my_cev2,其基于 ami-2345。您创建了一个名为 19.my_cev3 的新 CEV,该 CEV 也使用 ami-2345,但您在 $MANIFEST 环境变量中指定一个新的 JSON 清单。因此,只有新 CEV 中的数据库二进制文件与您的实例当前所用的 CEV 不同。

对于 Linux、macOS 或 Unix:

aws rds create-custom-db-engine-version \ --engine custom-oracle-ee \ --engine-version 19.my_cev3 \ --description "Non-CDB CEV with p35042068 based on ami-2345" \ --kms-key-id key-name \ --image-id ami-2345 \ --manifest $MANIFEST

对于 Windows:

aws rds create-custom-db-engine-version ^ --engine custom-oracle-ee ^ --engine-version 19.my_cev3 ^ --description "Non-CDB CEV with p35042068 based on ami-2345" ^ --kms-key-id key-name ^ --image-id ami-2345 ^ --manifest $MANIFEST

以下示例将 my-custom-instance 升级到引擎版本 19.my_cev3。只升级了数据库。

对于 Linux、macOS 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --engine-version 19.my_cev3 \ --apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier my-custom-instance ^ --engine-version 19.my_cev3 ^ --apply-immediately

查看 RDS Custom 数据库实例的待定数据库升级

您可以使用 describe-db-instancesdescribe-pending-maintenance-actions Amazon CLI 命令查看 Amazon RDS Custom 数据库实例的待定数据库升级。

但是,如果您使用 --apply-immediately 选项或升级正在进行中,则此方法将不起作用。

以下 describe-db-instances 命令会显示 my-custom-instance 的待定数据库升级。

aws rds describe-db-instances --db-instance-identifier my-custom-instance

输出与以下内容类似。

{ "DBInstances": [ { "DBInstanceIdentifier": "my-custom-instance", "EngineVersion": "19.my_cev1", ... "PendingModifiedValues": { "EngineVersion": "19.my_cev3" ... } } ] }

排查 RDS Custom for Oracle 数据库实例升级失败的问题

如果 RDS Custom 数据库实例升级失败,将生成 RDS 事件并且数据库实例状态变为 upgrade-failed

您可以使用 describe-db-instances Amazon CLI 命令查看此状态,如以下示例所示。

aws rds describe-db-instances --db-instance-identifier my-custom-instance

输出与以下内容类似。

{ "DBInstances": [ { "DBInstanceIdentifier": "my-custom-instance", "EngineVersion": "19.my_cev1", ... "PendingModifiedValues": { "EngineVersion": "19.my_cev3" ... } "DBInstanceStatus": "upgrade-failed" } ] }

升级失败后,所有数据库操作都将被阻止,修改数据库实例以执行以下任务除外:

  • 重试相同的升级

  • 暂停和恢复 RDS Custom 自动化

  • 时间点恢复 (PITR)

  • 删除数据库实例

注意

如果已为 RDS Custom 数据库实例暂停自动化操作,则在恢复自动化之前,您将无法重试升级。

RDS 管理的只读副本的升级失败与主副本的升级失败情况适用相同的操作。

有关更多信息,请参阅 排查 RDS Custom for Oracle 的升级问题