为 Amazon RDS Custom 排除数据库的故障 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 Amazon RDS Custom 排除数据库的故障

您可以学习如何解决 Amazon RDS Custom 数据库实例的问题。

查看 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 和 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 19.cev_nameRDS-EVENT-0196,并包含有关失败的详细信息。例如,事件会打印丢失的文件。

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

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

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

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

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

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

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

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

  • OPatch 版本与补丁文件不兼容。

  • 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 提供了名为支持外围的监控功能。支持外围可确保您的 RDS Custom 实例使用受支持的 Amazon 基础设施、操作系统和数据库。

支持外围将检查 修复不受支持的配置 中所列的要求是否已得到满足。如果其中的任意要求未得到满足,则 RDS Custom 会认为数据库实例位于支持外围之外。然后,RDS Custom 会将数据库实例状态更改为 unsupported-configuration,然后发送事件通知。修复配置问题后,RDS Custom 会将数据库实例状态更改为 available

unsupported-configuration 状态下会发生什么情况

当数据库实例处于 unsupported-configuration 状态时,会出现如下情况:

  • 您将无法修改数据库实例。

  • 您将无法生成数据库快照。

  • 不会创建自动备份。

  • 如果底层 Amazon EC2 实例受损,则 RDS Custom 自动化不会替换该实例。

然而,以下 RDS Custom 自动化程序将继续运行:

  • RDS Custom 代理将监控数据库实例并向支持外围发送进一步更改的通知。

  • 支持外围将继续运行,并捕获数据库实例的变更事件。此举有两个目的:

    • 当您修复了导致数据库实例处于 unsupported-configuration 状态的配置时,支持外围可以将数据库实例返回到 available 状态。

    • 如果您执行了其他不受支持的配置,支持外围会就这些配置向您发出通知,以便您加以更正。

  • 重做日志仍将被归档并上传到 Amazon S3,以便执行时间点恢复 (PITR)。但是,请注意以下事项:

    • 为完全还原为新数据库实例,PITR 可能需要花费较长时间。这是因为当数据库实例位于 unsupported-configuration 状态时,您不能自动或手动生成快照。

      在实例进入 unsupported-configuration 状态前,PITR 必须从最近生成的快照开始重播更多重做日志。

    • 在某些情况下,由于您所做的更改影响了重做日志上载功能,因此数据库实例将处于 unsupported-configuration 状态。在这些情况下,PITR 无法将数据库实例恢复到最近的可还原时间点。

修复不受支持的配置

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

在下表中,您可以找到支持外围所发送通知以及如何修复这些问题的说明。这些通知和支持外围可能会更改。

通知 描述 操作

数据库运行状况:

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

  • 数据库实例已重启。

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

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

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

ps -eo pid,state,command | grep smon

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

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

数据库归档滞后目标(仅 RDS Custom for Oracle):

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

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

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

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

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

alter system set archive_lag_target=300 scope=both;

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

数据库日志模式(仅 RDS Custom for Oracle):

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

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

登录主机并关闭数据库实例。您可以使用以下 SQL 命令。

shutdown immediate;

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

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

RDS Custom 代理状态(RDS Custom for Oracle):

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 代理正在运行。

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

ps -ef | grep RDSCustomAgent
pgrep java

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

RDS Custom 代理状态(RDS Custom for SQL Server):

RDS Custom 实例已超出外围,因为 RDS Custom 代理使用了不受支持的配置。

RDS Custom 代理必须始终运行。

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

在 RDS Custom for SQL Server 上,监控服务会恢复已停止的代理。如果卸载 RDS Custom 代理,则数据库实例将超出支持外围。

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

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

ps -ef | grep RDSCustomAgent
pgrep java

Amazon Systems Manager 代理 (SSM Agent) 状态 (RDS Custom for Oracle):

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

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

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

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

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

当 SSM 代理再次运行时,告警将切换到 OK 状态。此切换操作将通知支持外围代理正在运行。

SSM 代理状态 (RDS Custom for SQL Server):

RDS Custom 实例已超出外围,因为 SSM 代理使用了不受支持的配置。

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

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

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

sudo 配置(仅 RDS Custom for Oracle):

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

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

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

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

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

您可使用以下命令。

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

在支持外围确定 sudo 配置受支持时,数据库实例会在 30 分钟内可用。

Amazon Elastic Block Store (Amazon EBS) 卷:

RDS Custom for Oracle:

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

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

RDS Custom for SQL Server:

  • RDS Custom 实例已超出外围,因为 EBS 卷元数据使用了不受支持的配置。

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

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

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

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

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

  • (仅 RDS Custom for Oracle)没有额外的 EBS 卷附上数据库实例。

如果您已分离任何初始 EBS 卷,请联系 RDS Custom 操作员。

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

如果您修改了 EBS 卷的存储大小,请联系 RDS Custom 运营商。

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

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

  • 联系 RDS Custom 运营商。

EBS 优化的实例(仅 RDS Custom for Oracle):

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. 重新装载二进制文件和数据卷。

Amazon EC2 实例状态:

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

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

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

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

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

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

在 RDS Custom for SQL Server 上,如果 EC2 实例被终止,RDS Custom 将执行自动恢复以预置新的 EC2 实例。

Amazon EC2 实例属性:

RDS Custom for Oracle:

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

RDS Custom for SQL Server:

  • RDS Custom 实例已超出外围,因为 EC2 实例元数据使用了不受支持的配置。

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

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

要根据扩缩要求更改实例类型,请执行 PITR 并指定新的实例类型和类。但是,这样做会产生一个带有新主机和域名系统 (DNS) 名称的新 RDS Custom 数据库实例。

Oracle Data Guard 角色(仅 RDS Custom for Oracle):

  • 数据库实例 my-custom-instance 的实例角色已更改。

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

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

Oracle Data Guard DATABASE_ROLE 参数必须为 PRIMARYPHYSICAL STANDBY

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

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

共享内存连接(仅 RDS Custom for SQL Server):

RDS Custom 实例已超出外围,因为共享内存协议使用了不受支持的配置。

EC2 主机上的 RDS Custom 代理使用共享内存协议连接到 SQL Server。

如果此协议被关闭(Enabled 设置为 No),则 RDS Custom 无法执行其管理操作并会将数据库实例置于支持外围之外。

要将 RDS Custom for SQL Server 数据库实例带回到支持外围内,请将 Enabled 设置为 Yes,以在 Shared Memory Properties(共享内存属性)窗口的 Protocol(协议)页面开启共享内存协议。

启用协议后请重新启动 SQL Server。

数据库文件位置(仅 RDS Custom for SQL Server):

RDS Custom 实例已超出外围,因为数据库文件位置使用了不受支持的配置。

预设情况下,所有 SQL Server 数据库文件都存储在 D: 驱动器上,位于 D:\rdsdbdata\DATA 目录中。

如果您创建或更改数据库文件位置,使其位于 D: 驱动器以外的任何位置,则 RDS Custom 会使数据库实例处于支持外围之外。

我们强烈建议您不要在 C: 驱动器上保存任何数据库文件。在某些操作(例如硬件故障)期间,您可能会丢失 C: 驱动器上的数据。C: 驱动器上的存储不能提供与 D: 驱动器上相同的持久性,后者为 EBS 卷。

此外,如果找不到数据库文件,RDS Custom 会使数据库实例处于支持外围之外。

请将所有 RDS Custom for SQL Server 数据库文件都存储在 D: 驱动器上。

Amazon RDS Custom 如何替换受损的主机

如果 Amazon EC2 主机受损,RDS Custom 会尝试重新启动它。如果重新启动失败,RDS Custom 将使用 Amazon EC2 中包含的相同停止和开启功能。

停止并启动主机。

RDS Custom 会自动执行以下步骤,无需用户干预:

  1. 停止 Amazon EC2 主机。

    EC2 实例将正常关闭并停止运行。所有 Amazon EBS 卷保持连接至实例,而且其数据将保留下来。存储在实例存储卷(RDS Custom 上不支持)或主机 RAM 中的所有数据都将不复存在。

    有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的停止和开启实例

  2. 启动 Amazon EC2 主机。

    EC2 实例将迁移到新的底层主机硬件。在某些情况下,RDS Custom 数据库实例将仍保留在原始主机上。

主机更换的影响

在 RDS Custom 中,您可以完全控制根设备卷和 Amazon EBS 存储卷。根卷可能包含您不想丢失的重要数据和配置。

RDS Custom for Oracle 会在操作后保留所有数据库和客户数据,包括根卷数据。无需用户干预。在 RDS Custom for SQL Server 上,数据库数据将会保留,但 C: 驱动器上的所有数据(包括操作系统和客户数据)都将丢失。

在完成更换之后,Amazon EC2 主机将拥有一个新的公有 IP 地址。主机会保留以下内容:

  • 实例 ID

  • 私有 IP 地址

  • 弹性 IP 地址

  • 实例元数据

  • 数据存储卷数据

  • 根卷数据(位于 RDS Custom for Oracle 上)

Amazon EC2 主机的最佳实践

Amazon EC2 主机更换功能涵盖了大多数 Amazon EC2 受损情况。我们建议您遵循以下最佳实践:

  • 在更改配置或操作系统之前,请备份数据。如果根卷或操作系统受到损坏,那么主机更换将无法修复这一问题。您唯一的选择是从数据库快照还原或采用时间点恢复。

  • 不要手动停止或终止物理 Amazon EC2 主机。这两种操作都会导致实例被置于 RDS Custom 支持外围之外。

  • 如果您将其他卷附加到 Amazon EC2 主机,请将其配置为在重新启动时重新装载。如果主机受损,RDS Custom 可能会自动停止和开启主机。

解决 RDS Custom for Oracle 数据库实例的 升级问题

RDS Custom 的责任共担模型提供了操作系统外壳级别的访问权限和数据库管理员访问权限。RDS Custom 会在您的账户中运行资源,与 Amazon RDS 不同,因为后者会在系统账户中运行资源。访问权限更多,责任也更大。因此,如果发生某些事件(例如升级失败),您可能必须进行干预。

下面,您可以找到一些重要的技术、文件和命令,以在升级 RDS Custom for Oracle 数据库实例时使用:

  • 检查以下日志文件:

    • 所有升级输出日志文件都保存在数据库实例上的 /tmp 目录中。

    • 这些日志文件被命名 catupg*.log

    • 名为 /tmp/catupgrd0.log 的主输出文件会报告所有错误,以及执行过的步骤。

    • 数据库实例的 alert.log 文件位于 /rdsdbdata/log/trace 目录中。定期检查此文件是最佳实践。

  • 请在 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');