针对 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 事件类别和事件消息

事件 ID 配置 RDS 事件消息 操作

SP-O0000

手动不支持的配置

RDS Custom 数据库实例状态设置为 [不支持的配置],原因是 原因

要解决此问题,请创建 Amazon Web Services Support 案例。

Amazon 资源(基础设施)

SP-O1001

Amazon Elastic Block Store (Amazon EBS) 卷

以下 EBS 卷已添加到 EC2 实例 ec2_id 中:volume_id。要解决此问题,请将指定的卷与实例分离。

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

  • 二进制卷是数据库软件二进制文件所在的位置

  • 数据卷是数据库文件所在的位置

当您创建数据库实例时,您指定的存储配置将配置数据卷。

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

  • 使用数据库实例创建的初始 EBS 卷仍与该实例相关联。

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

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

使用以下 CLI 命令比较 EBS 卷详细信息和 RDS Custom for Oracle DB 实例详细信息的卷类型。

aws rds describe-db-instances \ --db-instance-identifier db-instance-name | grep StorageType

SP-O1002

Amazon Elastic Block Store (Amazon EBS) 卷

EBS 卷 volume_id 已与 EC2 实例 [ec2_id] 相分离。您无法将原始卷与该实例进行分离。要解决此问题,请将 volume_id 重新附加到 ec2_id

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

  • 二进制卷是数据库软件二进制文件所在的位置

  • 数据卷是数据库文件所在的位置

当您创建数据库实例时,您指定的存储配置将配置数据卷。

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

  • 使用数据库实例创建的初始 EBS 卷仍与该实例相关联。

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

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

使用以下 CLI 命令比较 EBS 卷详细信息和 RDS Custom for Oracle DB 实例详细信息的卷类型。

aws rds describe-db-instances \ --db-instance-identifier db-instance-name | grep StorageType

SP-O1003

Amazon Elastic Block Store (Amazon EBS) 卷

对已附加到 EC2 实例 ec2_id源 EBS 卷 volume_id 进行了如下修改:大小从 [X] 更改为 [Y],类型从 [N] 更改为 [M],IOPS 从 [J] 更改为 [K]。要解决此问题,请恢复修改。

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

  • 二进制卷是数据库软件二进制文件所在的位置

  • 数据卷是数据库文件所在的位置

当您创建数据库实例时,您指定的存储配置将配置数据卷。

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

  • 使用数据库实例创建的初始 EBS 卷仍与该实例相关联。

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

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

使用以下 CLI 命令比较 EBS 卷详细信息和 RDS Custom for Oracle DB 实例详细信息的卷类型。

aws rds describe-db-instances \ --db-instance-identifier db-instance-name | grep StorageType

SP-O1004

Amazon EC2 实例状态

自动恢复使 EC2 实例 [ec2_id] 处于受损状态。要解决此问题,请参阅实例恢复故障排除

要检查数据库实例的状态,请使用控制台或运行以下 Amazon CLI 命令:

aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep DBInstanceStatus

SP-O1005

Amazon EC2 实例属性

EC2 实例 [ec2_id] 进行了如下修改:属性 [att1] 从 [val-old] 更改为 [val-new],属性 [att2] 从 [val-old] 更改为 [val-new]。要解决此问题,请恢复到原始值。

SP-O1006

Amazon EC2 实例状态

EC2 实例 [ec2_id] 已终止或找不到。要解决问题,请删除 RDS Custom 数据库实例。

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

删除数据库实例
  1. 要检查数据库实例的状态,请使用控制台或运行以下 Amazon CLI 命令:

    aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep DBInstanceStatus
  2. 删除 RDS Custom for Oracle 数据库实例。

SP-O1007

Amazon EC2 实例状态

EC2 实例 [ec2_id] 已停止。要解决问题,请启动该实例。

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

重新启动数据库实例
  1. 要检查数据库实例的状态,请使用控制台或运行以下 Amazon CLI 命令:

    aws rds describe-db-instances \ --db-instance-identifier db-instance-name |grep DBInstanceStatus
  2. 启动数据库实例。

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

操作系统

SP-O2001

RDS Custom 代理状态

RDS Custom 代理未在 EC2 实例 [ec2_id] 上运行。确保代理在 [ec2_id] 上运行。

在 RDS Custom for Oracle 上,如果 RDS Custom 代理停止,则数据库实例将超出支持外围。代理每 30 秒会向 Amazon CloudWatch 发布一次 IamAlive 指标。如果指标在 30 秒之后未能发布,则会触发告警。支持外围还会每隔 30 分钟监控主机上的 RDS Custom 代理进程状态。

重新启动 RDS Custom 代理
  1. 登录到主机并确保 RDS Custom 代理正在运行。

  2. 运行以下命令之一以检查代理的状态。

    service rdscustomagent status
  3. 要启动代理,请使用以下命令。

    service rdscustomagent start

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

SP-O2002

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

无法在 EC2 实例 [ec2_id] 上访问 Systems Manager 代理。请确保您已正确配置网络、代理和 IAM 权限。

SSM 代理必须始终运行。RDS Custom 代理负责确保 Systems Manager 代理正在运行。如果 SSM 代理终止并重新启动,RDS Custom 代理将向 CloudWatch 发布指标。RDS Custom 代理对指标设置了一项告警,当过去每三分钟内出现一次重新启动时,即会触发该告警。支持外围还会每隔 30 分钟监控主机上 SSM 代理的进程状态。

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

SP-O2003

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

EC2 实例 [ec2_id] 上的 Systems Manager 代理多次崩溃。有关更多信息,请参阅 SSM 代理故障排除文档。

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

SP-O2004

操作系统时区

EC2 实例 [ec2_id] 上的时区已更改。要解决此问题,请将时区恢复为之前的 [previous-time-zone] 设置。然后使用 RDS 选项组更改时区。

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

修复时区设置
  1. 登录您的 EC2 主机并检查操作系统时区,如下所示:

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

  3. 停止数据库实例。

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

  5. 开启数据库实例。

  6. 恢复 RDS Custom 自动化。

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

SP-O2005

sudo 配置

EC2 实例 [ec2_id] 上的 sudo 配置缺少必要的权限。要解决此问题,请恢复最近对 sudo 配置进行的更改。

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

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

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

调查对 sudo 配置进行的更改
  1. 登录到主机。

  2. 运行以下命令。

    visudo -c -f /etc/sudoers.d/individual_sudo_files
  3. 根据需要修改 sudo 配置。

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

SP-O2006

S3 存储桶可访问性

RDS Custom 自动化功能无法从 EC2 实例 [ec2_id] 上的 S3 存储桶下载文件。检查网络配置,并确保该实例允许与 S3 建立双向连接。

数据库

SP-O3001

数据库存档滞后目标

EC2 实例 [ec2_id] 上的 ARCHIVE_LAG_TARGET 参数超出建议的范围 value_range。要解决此问题,请将参数设置为 value_range 范围内的值。

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

更改已存档重做日志的延迟目标
  1. 登录您的 EC2 主机

  2. 连接到 RDS Custom for Oracle 数据库实例

  3. ARCHIVE_LAG_TARGET 参数更改为介于 60–7200 之间的值。例如,使用以下 SQL 语句。

    ALTER SYSTEM SET ARCHIVE_LAG_TARGET=300 SCOPE=BOTH;

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

SP-O3002

Oracle Data Guard 角色

EC2 实例 [ec2_id] 上的 Oracle Data Guard 不支持数据库角色 [role_name]。要解决此问题,请将 DATABASE_ROLE 参数设置为 PRIMARY 或 PHYSICAL STANDBY。

支持外围每 15 秒监控当前数据库角色,并在数据库角色发生更改时发送 CloudWatch 通知。Oracle Data Guard DATABASE_ROLE 参数必须为 PRIMARYPHYSICAL STANDBY

将 Oracle Data Guard 数据库角色还原为受支持的值
  1. 运行以下语句检查 Oracle Data Guard 角色:

    SELECT DATABASE_ROLE FROM V$DATABASE;
  2. 如果您的数据库实例是独立的,则可以使用以下任一语句将其改回为 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 秒内变为可用状态。

SP-O3003

数据库运行状况

Oracle 数据库的 SMON 进程处于僵尸状态。要解决此问题,请手动恢复 EC2 实例 [ec2_id] 上的数据库,打开数据库,然后立即对其进行备份。如需更多帮助,请联系Amazon Web Services Support。

支持外围会监控数据库实例状态。其还将监控前一小时和一天中发生的重启次数。当实例处于仍然存在的状态时,您会收到通知,但您无法与其交互。

要设置支持边界,请评估您的实例状态
  1. 登录到主机并确定数据库状态。

    ps -eo pid,state,command | grep smon
  2. 如有必要,请重新启动数据库实例。如果重新启动失败,请继续执行下一步。

  3. 如有必要,请重新启动 EC2 主机。

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

SP-O3004

数据库日志模式

EC2 实例 [ec2_id] 上的数据库日志模式已更改为 [value_b]。要解决此问题,请将日志模式设置为 [value_a]。

将数据库实例日志模式更改为 ARCHIVELOG
  1. 登录您的 EC2 主机。

  2. 连接到数据库并运行以下语句:

    SELECT LOG_MODE FROM V$DATABASE;

    或者,也可以在 SQL*Plus 中运行以下命令:

    ARCHIVE LOG LIST
  3. 运行以下 SQL*Plus 命令以启动一致关机。

    SHUTDOWN IMMEDIATE

RDS Custom 代理将自动重启数据库实例并将日志模式设置为 ARCHIVELOG。数据库实例将在 30 分钟内可用。

SP-O3005

Oracle 主路径

EC2 实例 [ec2_id] 上的 Oracle 主目录已更改为 new_path。要解决此问题,请将设置恢复为 old_path

SP-O3006

数据库唯一名称

EC2 实例 [ec2_id] 上的数据库唯一名称已更改为 new_value。要解决此问题,请将名称恢复为 old_value

更改数据库实例的数据库唯一名称
  1. 登录您的 EC2 主机。

  2. 连接到数据库并运行以下语句:

    SELECT DB_UNIQUE_NAME FROM V$DATABASE;
  3. 使用命令 ALTER SYSTEM SET DB_UNIQUE_NAME 指定源数据库唯一名称。

  4. 运行以下 SQL 语句启动一致关机。

    SHUTDOWN IMMEDIATE;

RDS Custom 代理将自动重启数据库实例并将日志模式设置为 ARCHIVELOG。数据库实例将在 30 分钟内可用。

排查 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 并要求他们将您的数据库实例移到 available 状态。