对更新失败进行故障排除

更新操作可能会因各种原因而失败。通常,操作会失败,因为数据库节点已关闭,文件系统上的空间不足,或者数据库主机无法访问对象存储。

本文包含的信息可帮助您确定失败的原因并解决问题。根据错误条件,信息分为多个部分。

如果您已经知道原因,则可以使用建议的解答跳至主题。否则,请使用 Identify the Cause of Failure 主题开始。

本文包含以下主题:

提示:

您还可以创建串行控制台连接以在单用户模式下对系统进行故障排除。有关在 OCI 控制台中创建串行控制台连接的信息,请参见管理与数据库系统的串行控制台连接

确定故障原因

在 OCI 控制台中,您可以通过查看数据库系统或单个数据库的更新历史记录来确定失败的更新操作。未成功应用的更新显示失败状态,并包括导致失败的错误的简要说明。如果错误消息中未包含足够的信息来指向解决方案,则可以使用数据库 CLI 和日志文件收集更多数据。然后,请参考本文中适用的章节以获得解决方案。

屏幕中包含以下主题:

确定更新操作失败的根本原因

  1. 以 root 用户身份登录到主机并导航到 /opt/oracle/dcs/bin/ 目录。

  2. 确定对数据库执行的操作顺序。

    dbcli list-jobs

    请注意列出的最后一个作业 ID,其状态不是 Success

  3. 使用上一步中记录的作业 ID,使用以下命令检查该作业的详细信息:

    dbcli describe-job -i <job_ID> -j

    通常,运行此命令足以揭示失败的根本原因。

  4. 如果需要更多信息,请查看 /opt/oracle/dcs/log/dcs-agent.log 文件。

    通过使用步骤 2 中作业报告返回的时间戳,可以在此文件中找到作业 ID。

  5. 如果更新失败位于双节点 RAC 数据库上,请在两个节点上执行步骤 3 和 4。

数据库服务代理问题

您的数据库使用代理框架,以便通过 Oracle Cloud 平台进行管理。

解决已停止代理导致的更新故障

有时,如果 dcsagent 程序的状态为 stop/waiting ,则可能需要重新启动该程序以解决更新故障。

重新启动数据库服务代理

  1. 在命令提示符下,检查代理的状态:

    initctl status initdcsagent
  2. 如果代理处于 stop/waiting 状态,请尝试重新启动代理:

    initctl start initdcsagent
  3. 再次检查代理的状态以确认代理具有启动/正在运行状态:

    initctl status initdcsagent

解决需要更新的代理导致的更新失败

如果需要更新代理,更新操作也会失败。系统将针对此故障发出以下错误消息:

Current DcsAgent version is less than or equal to minimum required version.

要解决此问题,请执行以下部分中的步骤。

请与 Oracle 技术支持联系以更新 OCI Database Service Agent

  1. 使用以下命令确认代理 (dcsagent) 和 DCS 管理程序 (dcsadmin) 正在运行:

    initctl status initdcsagent
    initctl status initdcsadmin
  2. 如果这些程序未运行,请使用以下命令重新启动它们:

    initctl start initdcsagent
    initctl start initdcsadmin
  3. 按照获取其他帮助中的说明收集 DCS 代理日志文件。
  4. 请与 Oracle 技术支持联系,以获得有关更新代理的帮助。

对象存储连接问题

数据库系统和数据库更新存储在 OCI Object Storage 中。因此,成功的更新操作需要在数据库系统主机与从中下载更新的对象存储位置之间建立连接。

确保您的数据库主机可以连接到 OCI 对象存储

  1. 使用以下命令验证主机是否可以访问 OCI 对象存储:

    dbcli describe-latestpatch

    指示成功的示例输出:

    componentType   availableVersion
    --------------  --------------
    gi              12.2.0.1.180417
    gi              12.1.0.2.180417
    db              11.2.0.4.180417
    db              12.2.0.1.180417
    db              12.1.0.2.180417
    oak             12.1.2.11.3
    oak             12.2.1.1.0

    指示失败的示例输出:

    DCS-10032:Resource patch metadata is not found.Failed to download patchmetadata from objectstore
  2. 如果无法连接到对象存储,请参阅使用控制台备份数据库以了解如何配置对象存储连接。

主机问题

数据库主机上的以下一个或多个情况可能会导致更新操作失败:

更新操作期间未运行的数据库节点

无论是更新数据库系统还是数据库主目录,更新操作正在进行时,数据库的所有节点都必须处于活动状态且正在运行。使用 OCI 控制台检查每个节点的状态是否为 AVAILABLE,然后根据需要启动节点。

文件系统已完成

更新操作要求主机文件系统上的 /u01 目录中至少有 15 GB 的可用空间。在主机上使用 df -h 命令检查可用空间。如果文件系统空间不足,则可以删除旧的日志或跟踪文件以释放空间。

Oracle Clusterware 问题

Oracle Clusterware 未在运行

Oracle Clusterware 使服务器能够相互通信,以便它们可以作为一个集体单元起作用。必须在数据库系统上启动并运行集群软件程序,才能完成更新操作。有时,您可能需要重新启动 Oracle Clusterware 才能解决更新故障。

重新启动 Oracle Clusterware

  1. 在命令提示符下,检查 Oracle Clusterware 的状态:

    crsctl check crs

    输出:

    CRS-4638: Oracle High Availability Services is online
    CRS-4537: Cluster Ready Services is online
    CRS-4529: Cluster Synchronization Services is online
    CRS-4533: Event Manager is online

    有关更详细的状态信息,您可以运行 crsctl stat res -t

  2. 如果 Oracle Clusterware 未联机,请尝试重新启动程序:

    crsctl start crs
  3. 检查 Oracle Clusterware 的状态以确认它处于联机状态:

    crsctl check crs

未更新 Oracle Grid Infrastructure (GI)

在更新数据库的数据库系统之前,尝试更新数据库时会出现此问题。错误说明指示必须先更新 Oracle Grid Infrastructure。要解决此问题,请将数据库系统更新为最新可用版本。更新数据库系统后,可以重试数据库更新操作。

要获取数据库系统的当前可用 GI 版本和最新可用版本,请使用以下命令:

dbcli describe-component

数据库问题

数据库状态不当可能会导致更新失败。

数据库在更新操作期间未运行

数据库必须处于活动状态且正在运行,才能完成所有更新任务。否则,必须手动运行 datapatch 任务。

检查数据库是否处于活动状态且正在运行

使用以下命令检查数据库的状态,并确保解决可能使数据库处于不当状态的任何问题:

srvctl status database -d <db_unique_name> -verbose

系统将返回包含数据库实例状态的消息。要使更新操作成功,实例状态必须为打开

如果数据库未运行,请使用以下命令将其启动:

srvctl start database -d <db_unique_name> -o open

如果数据库已装载但未处于打开状态,请使用以下命令访问 SQL*Plus 命令提示符并将状态设置为打开

sqlplus / as sysdba
alter database open;

运行 datapatch 任务

在运行 datapatch 命令之前,请确保所有可插入数据库 (pluggable database,PDB) 均处于打开状态。要打开 PDB,可以使用 SQL*Plus 对 PDB 执行 ALTER PLUGGABLE DATABASE <pdb_name> OPEN READ WRITE;

$ORACLE_HOME/OPatch/datapatch

应在每个数据库主目录上运行 datapatch 命令。

获取其他帮助

如果您无法使用本文中的信息解决问题,请按照以下过程收集相关的数据库和诊断信息。收集完此信息后,请与 Oracle 技术支持联系。

收集有关失败作业的诊断信息

  1. 以 root 用户身份登录到主机并导航到 /opt/oracle/dcs/bin/ 目录。

  2. 运行以下两个命令以生成有关失败作业的信息:

    dbcli list-jobs | grep -i <dbname>
    dbcli describe-job -i <job_ID> -j

    第二个命令中的 <job_ID> 应为从第一个命令报告的最新失败作业的 ID。

  3. 运行诊断收集器脚本以创建包含 Oracle Support Services 诊断信息的 zip 文件。

    diagcollector.py

    此命令将在 /tmp 目录中创建名为 diagLogs-<timestamp>.zip 的文件。

收集 DCS 代理日志文件

要收集 DCS 代理日志文件,请执行以下操作:

  1. 以 opc 用户身份登录。
  2. 运行以下命令:

    sudo /opt/oracle/dcs/bin/diagcollector.py
  3. 系统将返回一条消息,指示代理日志在指定目录的 zip 文件中可用。例如:

    Log files collected to :/tmp/dcsdiag/diagLogs-1234567890.zip
    Logs are being collected to:
    /tmp/dcsdiag/diagLogs-1234567890.zip

收集 Oracle Grid Infrastructure 和数据库日志文件

如果 Oracle Grid Infrastructure 或 Oracle Database 更新失败,可以在以下位置找到这些失败的日志文件:

Oracle Grid Infrastructure

$GI_HOME/cfgtoollogs/

Oracle 数据库

$ORACLE_HOME/cfgtoollogs/