更新失败故障排除
由于各种原因,更新操作可能会失败。通常,操作会失败,因为数据库节点已关闭,文件系统上的空间不足,或者数据库主机无法访问对象存储。
本文包含的信息可帮助您确定故障原因并修复问题。根据错误条件,信息分为多个部分。
如果您已经知道原因,则可以使用建议的解答跳至主题。否则,请使用确定失败原因主题开始。
本文包含以下主题:
提示:您还可以创建串行控制台连接,以在单用户模式下对系统进行故障排除。有关在 OCI 控制台中创建串行控制台连接的信息,请参阅管理与数据库系统的串行控制台连接。
确定失败原因
在 OCI 控制台中,您可以通过查看数据库系统或单个数据库的更新历史记录来确定失败的更新操作。未成功应用的更新显示状态为失败,并包含导致失败的错误的简要说明。如果错误消息未包含足够的信息来指向解决方案,则可以使用数据库 CLI 和日志文件收集更多数据。然后,请参阅本文中的适用部分以了解解决方案。
屏幕中包含以下主题:
确定更新操作失败的根本原因
- 以 root 用户身份登录到主机并导航到
/opt/oracle/dcs/bin/目录。 -
确定对数据库执行的操作顺序。
dbcli list-jobs请注意列出的状态不是成功的最后一个作业 ID。
-
使用上一步中记录的作业 ID,使用以下命令检查该作业的详细信息:
dbcli describe-job -i <job_ID> -j通常,运行此命令足以揭示失败的根本原因。
-
如果需要更多信息,请查看
/opt/oracle/dcs/log/dcs-agent.log文件。通过使用第 2 步中作业报告返回的时间戳,可以在此文件中找到作业 ID。
- 如果更新失败位于双节点 RAC 数据库上,请在两个节点上执行步骤 3 和 4。
数据库服务代理问题
您的数据库使用代理框架,允许您通过 Oracle Cloud 平台进行管理。
屏幕中包含以下主题:
解决已停止代理导致的更新失败
有时,如果 dcsagent 程序的状态为 stop/waiting ,则可能需要重新启动该程序以解决更新故障。
重新启动数据库服务代理
-
在命令提示符中,检查代理的状态:
initctl status initdcsagent -
如果代理处于 stop/waiting 状态,请尝试重新启动代理:
initctl start initdcsagent -
再次检查代理的状态以确认其具有 start/running 状态:
initctl status initdcsagent
解决需要更新的代理导致的更新失败
如果需要更新代理,更新操作也会失败。系统会针对此故障提供以下错误消息:
Current DcsAgent version is less than or equal to minimum required version.
要解决此问题,请执行以下部分中的步骤。
请与 Oracle 技术支持联系以更新 OCI 数据库服务代理
-
使用以下命令确认代理 (dcsagent) 和 DCS 管理程序 (dcsadmin) 正在运行:
initctl status initdcsagentinitctl status initdcsadmin -
如果这些程序未运行,请使用以下命令重新启动它们:
initctl start initdcsagentinitctl start initdcsadmin - 按照获取其他帮助中的说明收集 DCS 代理日志文件。
- 请与 Oracle 技术支持联系,以获取有关更新代理的帮助。
对象存储连接问题
数据库系统和数据库更新存储在 OCI Object Storage 中。因此,成功的更新操作需要在数据库系统主机与从中下载更新的对象存储位置之间建立连接。
屏幕中包含以下主题:
确保您的数据库主机可以连接到 OCI 对象存储
-
使用以下命令验证主机是否可以访问 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 -
如果无法连接到对象存储,请参阅使用控制台备份数据库以了解如何配置对象存储连接。
主机的问题
数据库主机上的以下一个或多个条件可能会导致更新操作失败:
屏幕中包含以下主题:
数据库节点在更新操作期间未运行
无论是更新数据库系统还是数据库主目录,在执行更新操作时,数据库的所有节点都必须处于活动状态且正在运行。使用 OCI 控制台检查每个节点的状态是否为 AVAILABLE,并根据需要启动节点。
文件系统已满
更新操作在主机文件系统的 /u01 目录中至少需要 15 GB 的空闲空间。在主机上使用 df -h 命令检查可用空间。如果文件系统的空间不足,则可以删除旧的日志或跟踪文件以释放空间。
Oracle Clusterware 问题
屏幕中包含以下主题:
Oracle Clusterware 未运行
Oracle Clusterware 使服务器能够相互通信,以便它们可以作为一个集体单元发挥作用。群集软件程序必须在数据库系统上启动并运行,更新操作才能完成。有时可能需要重新启动 Oracle Clusterware 才能解决更新故障。
重新启动 Oracle Clusterware
-
在命令提示符下,检查 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。 -
如果 Oracle Clusterware 未联机,请尝试重新启动程序:
crsctl start crs -
检查 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
如果数据库已装载但未处于 Open 状态,请使用以下命令访问 SQL*Plus 命令提示符并将状态设置为 Open :
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 技术支持联系。
屏幕中包含以下主题:
收集有关失败作业的诊断信息
- 以 root 用户身份登录到主机并导航到
/opt/oracle/dcs/bin/目录。 -
运行以下两个命令以生成有关失败作业的信息:
dbcli list-jobs | grep -i <dbname>dbcli describe-job -i <job_ID> -j第二个命令中的 <job_ID> 应为从第一个命令报告的最新失败作业的 ID。
-
运行诊断收集器脚本以创建包含 Oracle Support Services 诊断信息的 zip 文件。
diagcollector.py此命令在
/tmp目录中创建名为diagLogs-<timestamp>.zip的文件。
收集 DCS 代理日志文件
要收集 DCS 代理日志文件,请执行以下操作:
- 以 opc 用户身份登录。
-
运行以下命令:
sudo /opt/oracle/dcs/bin/diagcollector.py -
系统将返回一条消息,指示代理日志在指定目录的 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/