在 Amazon RDS for Oracle 中执行主要版本升级时应考虑哪些因素?

上次更新时间:2021 年 9 月 28 日

我有一个运行 Oracle 的 Amazon Relational Database Service(Amazon RDS)数据库实例。我想知道执行主要版本升级时必须考虑的因素。

简短描述

当 Amazon RDS 开始支持新版本的 Oracle 数据库时,您可以选择一个更高的版本,然后执行主要版本升级,从而升级现有的 Oracle 数据库版本。主要版本可能包括更新、新功能、安全修复、优化程序增强和性能改进。在升级生产数据库之前,建议首先在非生产环境中对照新版本的 Oracle 数据库测试应用程序的功能、兼容性和性能。

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

解决方法

升级之前

在执行主要版本升级之前,应注意以下几点:

升级路径:验证支持的从当前 Oracle 数据库版本升级预期的 Oracle 数据库主要版本的路径。您可以通过运行以下 AWS Command Line Interface(AWS CLI)命令来检查有效的升级路径。

对于 Windows:

aws rds describe-db-engine-versions --engine engine-edition --engine-version current-engine-version --query "DBEngineVersions[*].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].EngineVersion"

对于 Linux、macOS 或 Unix:

aws rds describe-db-engine-versions --engine engine-edition --engine-version current-engine-version --query 'DBEngineVersions[*].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].EngineVersion'

请务必在之前的命令中替换以下值:

  • engine-edition 替换为数据库引擎的版本。
  • current-engine-version 替换为当前的数据库引擎版本。

假设您有一个 Amazon RDS for Oracle 12.1.0.2.v10 实例。要了解支持 RDS for Oracle 实例升级的所有有效主要版本,请运行以下命令。

对于 Windows:

aws rds describe-db-engine-versions --engine oracle-ee --engine-version 12.1.0.2.v10 --query "DBEngineVersions[*].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].EngineVersion"

对于 Linux、macOS 或 Unix:

aws rds describe-db-engine-versions --engine oracle-ee --engine-version 12.1.0.2.v10 --query 'DBEngineVersions[*].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].EngineVersion'

实例类:验证要升级的主要版本是否支持当前实例类。有关 RDS for Oracle 支持的实例类的信息,请参阅支持的 Oracle 数据库实例类。您还可以通过运行以下 AWS CLI 命令来检查受支持的实例类。

对于 Windows:

aws rds describe-orderable-db-instance-options --engine engine-edition --engine-version new-engine-version --region example-region --query "OrderableDBInstanceOptions[*].DBInstanceClass"

对于 Linux、macOS 或 Unix:

aws rds describe-orderable-db-instance-options --engine engine-edition --engine-version new-engine-version --region example-region --query 'OrderableDBInstanceOptions[*].DBInstanceClass'

请务必在之前的命令中替换以下值:

  • engine-edition 替换为数据库引擎的版本。
  • new-engine-version 替换为您计划升级到的新版本。
  • example-region 替换为您正在使用的区域。

例如,假设您要升级到 RDS for Oracle 12.2.0.1.ru-2020-10.r1 实例。要了解在特定区域支持该主要版本的实例类,请运行以下命令:

aws rds describe-orderable-db-instance-options --engine oracle-ee --engine-version 12.2.0.1.ru-2020-10.rur-2020-10.r1 --region us-east-1 --query "OrderableDBInstanceOptions[*].DBInstanceClass"

请务必将命令中的 us-east-1 替换为您选择的区域。

客户端兼容性:验证 Oracle 客户端/驱动程序版本是否与新的主要版本兼容。检查是否必须在升级主要版本的同时升级驱动程序。有关互操作性的信息,请参阅有关 Oracle 数据库客户端和 Oracle 数据库互操作性的 Oracle 文档。

升级方法:您可以通过以下任意一种方式执行主要版本升级:

  • 修改 RDS 实例并应用新的主要版本。
    注意:此方法涉及一些停机时间。
  • 使用主要版本创建新的 RDS 实例,然后使用 AWS Data Migration Service(AWS DMS)迁移数据。
    注意:AWS DMS 使用简约方法迁移数据,只创建高效迁移数据所需的对象。AWS DMS 会创建表、主键,在某些情况下还会创建唯一索引,但不会创建对于高效地从源迁移数据非必要的任何其他对象。例如,AWS DMS 不会创建二级索引、非主键约束或数据默认值。有关更多信息,请参阅 AWS DMS 的简要视图

根据您的使用案例,选择下面的一种方法来执行升级。

自定义参数组:如果您的实例具有自定义参数组,则为新的主要版本创建一个新参数组并恰当设置自定义参数。要识别当前使用的自定义参数,请将当前版本的默认参数组与现有自定义参数组进行比较

自定义选项组:如果您的实例具有自定义选项组,则为主要版本创建一个新的自定义选项组。如果选项组中存在持久性或永久性选项,例如时区或 Oracle 透明数据加密,则新的自定义选项组中必须包含相同的持久性或永久性选项。要在升级主要版本的同时将时区文件版本升级到数据库实例中的最新可用版本,请将 TIMEZONE_FILE_AUTOUPGRADE 选项添加到新的自定义选项组中。

字典统计信息:收集字典统计信息并修复对象统计信息可减少升级期间的实例停机时间。您可以通过运行以下查询来收集统计信息:

SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

无效对象:验证并确保您的数据库不包含无效对象。您可以通过运行以下查询来完成此操作:

SQL> SELECT OWNER, STATUS, COUNT (*) FROM DBA_OBJECTS GROUP BY OWNER, STATUS;

如果发现无效对象,请运行以下查询来检查哪个对象无效:

SQL> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE STATUS != 'VALID';

您可以通过运行以下查询来编译 Schema 中的所有无效对象:

SQL> EXEC DBMS_UTILITY.compile_schema(schema => 'ADMIN', compile_all => false);

请务必将查询中的ADMIN 替换为 Schema 的名称。

审计跟踪记录:确保审计跟踪记录不要冗长。如果审计跟踪记录冗长,升级前的检查和升级可能需要更长的时间。要截断审计跟踪记录,请参阅如何在运行 Oracle 的 Amazon RDS 数据库实例上截断 sys.aud$ 表? 您还可以使用 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL 过程来删除审计跟踪记录。

密码:通过运行以下查询来验证您没有使用旧版本的密码:

SQL> SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;

从查询结果中,如果发现用户只使用 10g 版本的密码,则检查是否可以使用较新版本的密码重新创建该用户。如果无法修复用户密码版本,则相应地设置 SQLNET.ALLOWED_LOGON_VERSION_SERVER 参数以避免连接错误。

如果在 RDS for Oracle 实例中定义了参数 sqlnetora.sqlnet.allowed_logon_version_server,则该参数表示连接到数据库服务器时所允许的身份验证协议的最低版本。如果设置为 8,则表示 允许使用大多数密码版本,并允许 DBA_USERS.PASSWORD_VERSIONS 值 10G、11G 和 12C 的任意组合。

如果在 RDS for Oracle 实例中定义了参数 sqlnetora.sqlnet.allowed_logon_version_client,则该参数表示当数据库充当客户端时要使用的最低身份验证协议。

有关更多信息,请参阅有关检查使用不区分大小写的密码版本的帐户的 Oracle 文档。

DBMS_JOB:升级到 Oracle Database 12c 版本 2 后,DBMS_JOB 软件包已停止使用。如果要升级到版本 19c,则建议在升级之前将所有 DBMS_JOB 作业转换为 DBMS_SCHEDULER 作业。在升级过程中,Oracle 会将 DBMS_JOB 作业转换为 DBMS_SCHEDULER 作业。有关更多信息,请参阅有关 DBMS_JOB 支持的 Oracle 文档。如果您有大量的 DBMS_JOB 条目,则升级可能需要更长的时间。

FreeStorageSpace:验证实例的存储容量是否即将耗尽。务必要检查 FreeStorageSpace CloudWatch 指标,以确保您有足够的可用存储空间来成功完成升级。有关更多信息,请参阅如何创建 CloudWatch 警报来监控 Amazon RDS 可用存储空间并防止存储已满的问题?

维护操作:在 Amazon RDS 控制台中检查您的实例是否有任何待处理的维护操作。这些操作将在升级时段应用。对于多可用区实例,如果不需要更新操作系统,则同时进行主实例升级和备用实例升级。如果需要更新操作系统,则 Amazon RDS 会按照多可用区部署中的 Oracle 升级中所述应用升级。

手动快照:为 Oracle 数据库实例创建 RDS 的手动快照,原因如下:

  • 只要 Amazon RDS 支持该版本,就可以使用快照回滚到以前的版本。
  • 自动快照通常是作为主要版本升级过程的一部分创建的。由于 Amazon Elastic Block Store(Amazon EBS)快照属于递增快照,新快照对备份进行的更改较少。因此,创建手动快照可能会缩短创建自动快照所花费的时间和完成升级所花费的总时间。

当前配置:运行以下查询以查看实例的当前配置并保存输出。输出将提供有关附加到当前 RDS for Oracle 实例的选项组、参数组、安全组和标签的信息。要回滚并执行从快照还原或执行时间点恢复,请使用通过以下命令中检索的信息:

> aws rds describe-db-instances --db-instance-identifier example-instance-name --region example-region

请务必替换查询中的以下值:

  • example-instance-name 替换为您的 RDS for Oracle 实例的名称。
  • example-region 替换为您选择的区域。

还原表空间:务必将 Undo Tablespace(还原表空间)设置为正确的大小,以避免在升级过程中执行调整大小操作。

触发器:运行以下查询以列出登录、注销和开机触发器:

SQL> SELECT OWNER, TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT, TABLE_OWNER, STATUS, ACTION_TYPE, TRIGGER_BODY FROM DBA_TRIGGERS WHERE TRIGGERING_EVENT LIKE '%LOGO%' or TRIGGERING_EVENT LIKE '%STARTUP%';

检查触发器是否有效且正常工作。即使触发器有效并且能够正常编译,但触发器可能会在运行时抛出错误并干扰数据库重启。检查是否有任何登录、注销或开机触发器在运行时引发错误。您可以通过运行以下查询来停用这些触发器:

SQL> ALTER TRIGGER EXAMPLE-OWNER.EXAMPLE-TRIGGER DISABLE;

请务必替换查询中的以下值:

  • EXAMPLE-OWNER 替换为您在其中创建触发器的 Schema 的名称。
  • EXAMPLE-TRIGGER 替换为触发器的名称。

例如:

--To disable AUDIT_USERS trigger in MYADMIN schema
SQL> ALTER TRIGGER MYADMIN.AUDIT_USERS DISABLE;

升级期间

启动升级后,您可以通过在 Amazon RDS 控制台中检查以下内容来监控升级进度:

  • 实例的 Logs & events(日志和事件)选项卡下的警报日志
  • 实例的 Logs & events(日志和事件)选项卡下的 Recent events(最近事件)

升级之后

  • 连接到数据库后,运行以下查询以验证补丁版本:
SQL> SELECT * FROM sys.registry$history;
SQL> SELECT INSTALL_ID,PATCH_ID,ACTION,STATUS,ACTION_TIME,DESCRIPTION FROM DBA_REGISTRY_SQLPATCH;
  • 应用补丁后,Amazon RDS 会在一个小时内更新 lsinventory-dbv.txt 文件。您可以打开 Amazon RDS 控制台,从实例的 Logs & events(日志和事件)选项卡下载此文件。通过读取 Isinventory-dbv.txt 文件来验证已应用的补丁。
  • 运行以下查询以收集字典统计信息和修复对象统计信息:
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
  • 运行以下查询以验证有效和无效对象的数量是否与升级之前的数量一致:
SQL> SELECT OWNER, STATUS, COUNT(*) from DBA_OBJECTS GROUP BY OWNER, STATUS;
  • 运行以下查询以编译 Schema 中的所有无效对象:
SQL> EXEC DBMS_UTILITY.compile_schema(schema => 'ADMIN', compile_all => false);
  • 如果由于新主要版本的优化程序功能原因,在升级后出现查询性能问题,则考虑使用 OPTIMIZER_FEATURES_ENABLE 参数。您可以在会话级别和系统级别更改此参数。例如,如果您将数据库从版本 18.1 升级到版本 19.1,但希望保留版本 18.1 的优化程序行为,则可以通过将 OPTIMIZER_FEATURES_ENABLE 参数的值设置为 18.1.0 来实现。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?