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

针对 Amazon RDS Custom for Oracle 排查数据库问题

RDS Custom 的责任共担模型提供了操作系统外壳级别的访问权限和数据库管理员访问权限。RDS Custom 会在您的账户中运行资源,与 Amazon RDS 不同,因为后者会在系统账户中运行资源。访问权限更多,责任也更大。在下面的各个部分中,您可以了解如何排查 Amazon RDS Custom 数据库实例的问题。

注意

本节介绍如何排查 RDS Custom for Oracle 的问题。有关排查 RDS Custom for Oracle 的问题,请参阅针对 Amazon RDS Custom for SQL Server 排查数据库的问题

查看 RDS Custom 事件

对于 RDS Custom 和 Amazon RDS 数据库实例而言,查看事件的流程是相同的。有关更多信息,请参阅查看 Amazon RDS 事件

要使用 Amazon CLI 查看 RDS Custom 事件通知,请使用 describe-events 命令。RDS Custom 推出了几项新事件。事件类别与 Amazon RDS 的事件类别相同。有关事件列表,请参阅 Amazon RDS 事件类别和事件消息

以下示例检索指定 RDS Custom 数据库实例发生的事件的详细信息。

aws rds describe-events \ --source-identifier my-custom-instance \ --source-type db-instance

查看 RDS Custom 事件

对于 RDS Custom 和 Amazon RDS 数据库实例而言,订阅事件的流程是相同的。有关更多信息,请参阅订阅 Amazon RDS 事件通知

要使用 CLI 订阅 RDS Custom 事件通知,请使用 create-event-subscription 命令。包括以下必需参数:

  • --subscription-name

  • --sns-topic-arn

以下示例为当前的 Amazon 账户中的 RDS Custom 数据库实例创建了备份和恢复事件的订阅。您也可以将通知发送到 --sns-topic-arn 指定的 Amazon Simple Notification Service (Amazon SNS) 主题。

aws rds create-event-subscription \ --subscription-name my-instance-events \ --source-type db-instance \ --event-categories '["backup","recovery"]' \ --sns-topic-arn arn:aws:sns:us-east-1:123456789012:interesting-events

为 RDS Custom for Oracle 排除自定义引擎版本创建的故障

当 CEV 创建失败时,RDS Custom 将发布带有消息 Creation failed for custom engine version major-engine-version.cev_nameRDS-EVENT-0198,并包含有关失败的详细信息。例如,事件会打印丢失的文件。

CEV 创建可能会因为以下问题而失败:

  • 包含安装文件的 Amazon S3 存储桶与您的 CEV 不在同一个 Amazon 区域。

  • 当您首次在 Amazon Web Services 区域 中提出 CEV 创建请求时,RDS Custom 将创建 S3 存储桶,用于存储 RDS Custom 资源(例如 CEV 构件,Amazon CloudTrail 日志和事务日志)。

    如果 RDS Custom 无法创建 S3 存储桶,则 CEV 创建将会失败。要么调用者没有 步骤 5:为您的 IAM 用户或角色授予所需的权限 中所述的 S3 权限,要么 S3 存储桶的数量已达到限制。

  • 调用者没有权限以从包含安装媒体文件的 S3 存储桶中获取文件。步骤 7:添加必要的 IAM 权限 中描述了这些权限。

  • 您的 IAM 策略有 aws:SourceIp 条件。请务必遵循《Amazon Identity and Access Management 用户指南》中 Amazon 根据源 IP 拒绝对 Amazon 的访问中的建议。还要确保调用方具有 步骤 5:为您的 IAM 用户或角色授予所需的权限 中所述的 S3 权限。

  • CEV 清单中列出的安装媒体文件不在 S3 存储桶中。

  • RDS Custom 不知道安装文件的 SHA-256 校验和。

    确认所提供文件的 SHA-256 校验和与 Oracle 网站上的 SHA-256 校验和相符。如果校验和相符,请联系 Amazon Support 并提供失败的 CEV 名称、文件名和校验和。

  • OPatch 版本与补丁文件不兼容。您可能会收到以下消息:OPatch is lower than minimum required version. Check that the version meets the requirements for all patches, and try again。要应用 Oracle 补丁,必须使用兼容的 OPatch 实用工具版本。您可以在补丁的自述文件中找到所需的 OPatch 实用工具版本。从 My Oracle Support 下载最新的 OPatch 实用工具,然后再次尝试创建 CEV。

  • CEV 清单中所指定补丁的顺序错误。

您可以在 RDS 控制台(在导航窗格中,选择 Events(事件))中或者使用 describe-events Amazon CLI 命令查看 RDS 事件。默认持续时间为 60 分钟。如果没有返回任何事件,请指定更长的持续时间,如以下示例中所示。

aws rds describe-events --duration 360

目前,从 Amazon S3 导入文件以创建 CEV 的 MediaImport 服务没有与 Amazon CloudTrail 整合。因此,如果您在 CloudTrail 中为 Amazon RDS 启用数据记录功能,对诸如 CreateCustomDbEngineVersion 事件等 MediaImport 服务的调用将不会记录。

但是,您可能会看到来自访问您 Amazon S3 存储桶的 API Gateway 的调用。这些调用来自 CreateCustomDbEngineVersion 事件的 MediaImport 服务。

修复 RDS Custom for Oracle 中不支持的配置

在责任共担模式中,您应负责修复导致 RDS Custom for Oracle 数据库实例进入 unsupported-configuration 状态的配置问题。如果问题与 Amazon 基础设施有关,则您可以使用控制台或 Amazon CLI 修复该问题。如果问题与操作系统或数据库配置有关,则您可以登录到主机进行修复。

注意

本节介绍如何修复 RDS Custom for Oracle 中不支持的配置。有关 RDS Custom for SQL Server 的信息,请参阅修复 RDS Custom for SQL Server 中不支持的配置

在下表中,您可以找到支持外围所发送的通知和事件以及如何修复这些问题的说明。这些通知和支持外围可能会更改。有关支持外围的背景,请参阅RDS Custom 支持外围。有关事件描述,请参阅Amazon RDS 事件类别和事件消息

配置 RDS 事件消息 描述 操作
数据库

数据库运行状况

您需要手动恢复 EC2 实例 [i-xxxxxxxxxxxxxxxxx] 上的数据库。

数据库实例已重启。

支持外围会监控数据库实例状态。其还将监控前一小时和一天中发生的重启次数。

当实例处于仍然存在的状态时,您会收到通知,但您无法与其交互。

登录到主机并检查数据库状态。

ps -eo pid,state,command | grep smon

如有必要,请重启 RDS Custom for Oracle 数据库实例以使其再次运行。有时,您有必要重新启动主机。

重启后,RDS Custom 代理会检测到数据库实例不再处于无响应状态。然后,它会通知支持外围以重新评估数据库实例状态。

Oracle Data Guard 角色

数据库角色 [LOGICAL STANDBY] 不受支持。验证 Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 上数据库的 Oracle Data Guard 配置。

支持外围每 15 秒监控当前数据库角色,并在数据库角色发生更改时发送 CloudWatch 通知。

Oracle Data Guard DATABASE_ROLE 参数必须为 PRIMARYPHYSICAL STANDBY

将 Oracle Data Guard 数据库角色还原为受支持的值。

RDS Custom 仅支持 PRIMARYPHYSICAL STANDBY 角色。您可以使用以下语句来检查角色:

SELECT DATABASE_ROLE FROM V$DATABASE;

如果您的 RDS Custom for Oracle 数据库实例是独立的,则可以使用以下任一语句将其改回为 PRIMARY 角色:

ALTER DATABASE COMMIT TO SWITCHOVER PRIMARY; ALTER DATABASE ACTIVATE STANDBY DATABASE;

如果您的数据库实例是副本,则可以使用以下语句将其改回为 PHYSICAL STANDBY 角色:

ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

在支持外围确定数据库角色受支持之后,RDS Custom for Oracle 数据库实例将在 15 秒内变为可用状态。

数据库归档滞后目标

Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 上受监控的归档滞后目标数据库参数已从 [300] 更改为 [0]。

由于以下 [1] 个问题,RDS Custom 实例使用不受支持的配置:(1) Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 上的归档滞后目标数据库参数超出所需范围 {"lowerbound":60,"upperbound":7200}。

支持外围监控 ARCHIVE_LAG_TARGET 数据库参数,以验证数据库实例的最新可还原时间是否在合理的范围内。

登录主机,连接到 RDS Custom for Oracle 数据库实例,并将 ARCHIVE_LAG_TARGET 参数更改为 60 – 7200 之间的值。

例如,请使用以下 SQL 命令:

ALTER SYSTEM SET ARCHIVE_LAG_TARGET=300 SCOPE=BOTH;

数据库实例将在 30 分钟内可用。

数据库日志模式

Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 上数据库的受监控日志模式已从 [ARCHIVELOG] 更改为 [NOARCHIVELOG]。

数据库实例日志模式必须设置为 ARCHIVELOG

登录您的主机并关闭 RDS Custom for Oracle 数据库实例。使用以下 SQL 语句启动一致关机。

SHUTDOWN IMMEDIATE;

RDS Custom 代理重启数据库实例并将日志模式设置为 ARCHIVELOG

数据库实例将在 30 分钟内可用。

操作系统

RDS Custom 代理状态

EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 上 RDS Custom 代理的受监控状态 已从“RUNNING”更改为“STOPPED”。

RDS Custom 代理必须始终运行。代理每 30 秒会向 Amazon CloudWatch 发布一次 IamAlive 指标。如果指标在 30 秒之后未能发布,则会触发告警。

支持外围还会每隔 30 分钟监控主机上的 RDS Custom 代理进程状态。

在 RDS Custom for Oracle 上,如果 RDS Custom 代理停止,则数据库实例将超出支持外围。

登录到主机并确保 RDS Custom 代理正在运行。

您可以使用以下命令查找代理的状态。

service rdscustomagent status

您可以使用以下命令启动代理。

service rdscustomagent start

当 RDS Custom 代理再次运行时,IamAlive 指标将发布到 Amazon CloudWatch,并且告警将切换到 OK 状态。此切换操作将通知支持外围代理正在运行。

Amazon Systems Manager 代理(SSM 代理)状态

EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 上的 Amazon Systems Manager 代理当前无法访问。请确保您已正确配置网络、代理和 IAM 权限。

SSM 代理必须始终运行。RDS Custom 代理负责确保 Systems Manager 代理正在运行。

如果 SSM 代理关闭并重新启动,RDS Custom 代理将向 CloudWatch 发布指标。RDS Custom 代理对指标设置了一项告警,当过去每三分钟内出现一次重新启动时,即会触发该告警。

支持外围还会每隔 30 分钟监控主机上的 SSM 代理进程状态。

有关更多信息,请参阅 SSM Agent 故障排除

sudo 配置

EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 上的 sudo 配置已经改变。

支持外围将监控是否允许某些操作系统用户在计算机上运行某些命令。它可以根据受支持的状态监控 sudo 配置。

sudo 配置不受支持时,RDS Custom 会尝试将这些配置覆盖回之前的受支持状态。如果成功,将发送以下通知:

RDS Custom 成功覆盖了您的配置。

如果覆盖不成功,您可以登录到主机并调查为什么最近对 sudo 配置的更改不受支持。

您可使用以下命令。

visudo -c -f /etc/sudoers.d/individual_sudo_files

在支持外围确定 sudo 配置受支持时,RDS Custom for Oracle 数据库实例会在 30 分钟内变为可用状态。

操作系统时区

Amazon EC2 实例上的时区 [i-xxxxxxxxxxxxxxxxx] 已从 [%s] 更改为 [%s]。

RDS 自动化检测到在未使用选项组的情况下更改了主机上的时区。这种主机级别的更改可能会导致 RDS 自动化失败,因此 EC2 实例处于 unsupported-configuration 状态。

要修复时区问题,请执行以下操作:

  1. 暂停 RDS Custom 自动化。有关更多信息,请参阅暂停和恢复 RDS Custom 数据库实例

  2. 停止数据库实例。

  3. 恢复操作系统上的时区更改。

  4. 开启数据库实例。

  5. 恢复 RDS Custom 自动化。

数据库实例将在 30 分钟内可用。为了防止将来移出外围,请通过选项组修改您的时区。有关更多信息,请参阅Oracle 时区

Amazon EC2 和 Amazon EBS 资源

Amazon EC2 实例状态

EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 的状态已从 [RUNNING] 更改为 [STOPPING]。

Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 已终止且无法找到。删除数据库实例以清理资源。

Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 已停止。开启实例,然后恢复主机配置。有关更多信息,请参阅故障排除文档。

支持外围将监控 EC2 实例状态变更通知。EC2 实例必须始终运行。

如果 EC2 实例已停止,请启动该实例并重新挂载二进制文件卷和数据卷。

如果 EC2 实例已终止,请删除 RDS Custom for Oracle 数据库实例。

Amazon EC2 实例属性

Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 的属性已经改变。

支持外围将监控运行 RDS Custom 数据库实例的 EC2 实例的实例类型。EC2 实例类型必须与您在 RDS Custom 数据库实例创建期间设置的类型保持一致。

使用 EC2 控制台或 CLI 将 EC2 实例类型更改回原始类型。

要根据扩展要求更改实例类型,请开始时间点恢复,并指定新的实例类型和类。此操作会产生一个带有新主机和域名系统(DNS)名称的新 RDS Custom 数据库实例。

Amazon Elastic Block Store(Amazon EBS)卷

以下 Amazon EBS 卷将附加到 Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx]:[[vol-01234abcd56789ef0, vol-0def6789abcd01234]]。

附加到 Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 的原始 Amazon EBS 卷已分离或修改。您无法附加或修改附加到 RDS Custom 实例的初始 EBS 卷。

除了从 Amazon Machine Image (AMI) 创建的根卷之外,RDS Custom 还创建了两种类型的 EBS 卷,并将它们与 EC2 实例关联。

二进制卷是数据库软件二进制文件所在的位置。数据卷是数据库文件所在的位置。您在创建数据库实例时设置的存储配置将用于配置数据卷。

支持外围将监控以下内容:

  • 使用数据库实例创建的初始 EBS 卷仍处于关联状态。

  • 初始 EBS 卷仍具有与最初设置相同的配置:存储类型、大小、预置 IOPS 和存储吞吐量。

  • 没有额外的 EBS 卷附加到数据库实例。

如果已分离任何初始 EBS 卷,请联系 Amazon Support。

如果您修改了 EBS 卷的存储类型、预置 IOPS 或存储吞吐量,请将修改恢复为原始值。

如果已修改 EBS 卷的存储大小,请联系 Amazon Support。

(仅 RDS Custom for Oracle)如果您附加了任何其他 EBS 卷,请执行以下任一操作:

  • 从 RDS Custom 数据库实例中分离其他 EBS 卷。

  • 请联系 Amazon Support。

EBS 优化状态

Amazon EC2 实例 [i-xxxxxxxxxxxxxxxxxxxxx] 的 EBS 优化属性已从 [enabled] 更改为 [disabled]。

Amazon EC2 实例应该经过 EBS 优化。

如果 EBS-optimized 属性已关闭 (disabled),支持外围不会使数据库实例处于 unsupported-configuration 状态。

要启用 EBS-optimized 属性:

  1. 请停止 EC2 实例。

  2. EBS-optimized 属性设置为 enabled

  3. 开启 EC2 实例。

  4. 重新装载二进制文件和数据卷。

排查 RDS Custom for Oracle 的升级问题

RDS Custom for Oracle 实例的升级可能会失败。接下来,您可以找到一些技术,以在升级 RDS Custom for Oracle 数据库实例时使用:

  • 检查数据库实例上 /tmp 目录中的升级输出日志文件。日志的名称取决于数据库引擎版本。例如,您可能会看到包含字符串 catupgrdcatup 的日志。

  • 检查位于 /rdsdbdata/log/trace 目录中的 alert.log 文件。

  • 请在 root 目录中运行以下 grep 命令来跟踪升级操作系统的过程。此命令显示日志文件的写入位置并确定升级过程的状态。

    ps -aux | grep upg

    下面显示了示例输出。

    root 18884 0.0 0.0 235428 8172 ? S< 17:03 0:00 /usr/bin/sudo -u rdsdb /rdsdbbin/scripts/oracle-control ORCL op_apply_upgrade_sh RDS-UPGRADE/2.upgrade.sh rdsdb 18886 0.0 0.0 153968 12164 ? S< 17:03 0:00 /usr/bin/perl -T -w /rdsdbbin/scripts/oracle-control ORCL op_apply_upgrade_sh RDS-UPGRADE/2.upgrade.sh rdsdb 18887 0.0 0.0 113196 3032 ? S< 17:03 0:00 /bin/sh /rdsdbbin/oracle/rdbms/admin/RDS-UPGRADE/2.upgrade.sh rdsdb 18900 0.0 0.0 113196 1812 ? S< 17:03 0:00 /bin/sh /rdsdbbin/oracle/rdbms/admin/RDS-UPGRADE/2.upgrade.sh rdsdb 18901 0.1 0.0 167652 20620 ? S< 17:03 0:07 /rdsdbbin/oracle/perl/bin/perl catctl.pl -n 4 -d /rdsdbbin/oracle/rdbms/admin -l /tmp catupgrd.sql root 29944 0.0 0.0 112724 2316 pts/0 S+ 18:43 0:00 grep --color=auto upg
  • 请运行以下 SQL 查询以验证组件的当前状态,以便查找数据库版本和数据库实例上安装的选项。

    SET LINESIZE 180 COLUMN COMP_ID FORMAT A15 COLUMN COMP_NAME FORMAT A40 TRUNC COLUMN STATUS FORMAT A15 TRUNC SELECT COMP_ID, COMP_NAME, VERSION, STATUS FROM DBA_REGISTRY ORDER BY 1;

    输出与以下内容类似。

    COMP_NAME STATUS PROCEDURE ---------------------------------------- -------------------- -------------------------------------------------- Oracle Database Catalog Views VALID DBMS_REGISTRY_SYS.VALIDATE_CATALOG Oracle Database Packages and Types VALID DBMS_REGISTRY_SYS.VALIDATE_CATPROC Oracle Text VALID VALIDATE_CONTEXT Oracle XML Database VALID DBMS_REGXDB.VALIDATEXDB 4 rows selected.
  • 请运行以下 SQL 查询以检查是否存在可能干扰升级过程的无效对象。

    SET PAGES 1000 LINES 2000 COL OBJECT FOR A40 SELECT SUBSTR(OWNER,1,12) OWNER, SUBSTR(OBJECT_NAME,1,30) OBJECT, SUBSTR(OBJECT_TYPE,1,30) TYPE, STATUS, CREATED FROM DBA_OBJECTS WHERE STATUS <>'VALID' AND OWNER IN ('SYS','SYSTEM','RDSADMIN','XDB');

排查 RDS Custom for Oracle 的副本提升问题

您可以使用控制台、promote-read-replica Amazon CLI 命令或 PromoteReadReplica API 在 RDS Custom for Oracle 中提升托管式 Oracle 副本。如果您删除了主数据库实例,并且所有副本都运行正常,则 RDS Custom for Oracle 会自动将您的托管式副本提升为独立实例。如果副本已暂停自动化或超出支持范围,则必须先修复副本,RDS Custom 才能自动对其进行提升。有关更多信息,请参阅RDS Custom for Oracle 的副本提升限制

在以下情况下,副本提升工作流可能会卡住:

  • 主数据库实例处于 STORAGE_FULL 状态。

  • 主数据库无法对其所有的在线重做日志存档。

  • Oracle 副本和主数据库上的存档重做日志文件之间存在差距。

要响应卡住的工作流,请完成以下步骤:

  1. 同步 Oracle 副本数据库实例上的重做日志差距。

  2. 强制将只读副本提升为最新应用的重做日志。在 SQL*Plus 中运行以下命令:

    ALTER DATABASE ACTIVATE STANDBY DATABASE; SHUTDOWN IMMEDIATE STARTUP
  3. 联系 Amazon Web Services Support 并请求其将您的数据库实例移到可用状态。