问题出在“刚好够”的 /opt 空间

问题出在“刚好够”的 /opt 空间

这次尝试升级到 23.26.2 时,笔者又遇到了一个很典型的问题:/opt 空间看起来差不多够,但 OPatch 实际执行时仍然容易失败。记录一下处理过程,方便后续遇到类似情况时快速判断。

01 | 问题出在“刚好够”的 /opt 空间

当时 /opt 的精确可用空间是:

 
 
13652123648 bytes
 

也就是大约 13.65 GB。而 OPatch 检查到需要:

 
 
12787.7 MB
 

从数字上看,好像还有一点余量,但这类场景并不稳。OPatch 在实际 apply 时,还需要额外空间用于解压、备份、rollback 和临时文件,所以“检查时看着差不多,真正执行时失败”很常见。

当时查看 /opt

 
 
[root@aibs ~]# df -Th /opt
 
Filesystem Type Size Used Avail Use% Mounted on
 
/dev/mapper/VolGroupVm-LogVolOpt ext4 25G 11G 13G 46% /opt
 

这里的关键不是只看 Avail 是否大于 OPatch 提示值,而是要给补丁过程留出实际操作空间。

02 | 扩容后重新检查并继续打补丁

笔者给 /opt 增加了 5G 空间:

 
 
lvextend -L +5G /dev/VolGroupVm/LogVolOpt
 
resize2fs /dev/VolGroupVm/LogVolOpt
 

扩容后再次查看:

 
 
[oracle@aibs ~]$ df -h /opt
 
Filesystem Size Used Avail Use% Mounted on
 
/dev/mapper/VolGroupVm-LogVolOpt 30G 11G 18G 38% /opt

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 

随后重新执行 OPatch 空间检查:

 
 
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace \
 
-phBaseDir /u01/media/39093711
 

检查通过后继续安装补丁,结果成功:

 
 
Patch 39093711 successfully applied.
 
Sub-set patch [38743669] has become inactive due to the application of a super-set patch [39093711].
 
Please refer to Doc ID 2161861.1 for any possible further required actions.
 
Log file location: /opt/oracle/product/26ai/dbhome_1/cfgtoollogs/opatch/opatch2026-07-17_10-31-55AM_1.log
 
 
 
OPatch succeeded.
 

接下来按照 readme 打开数据库,包含所有 PDB,并继续执行 datapatch 等必做步骤。

datapatch 执行完成后,可以看到补丁在各个容器中都应用成功:

 
 
Patch 39093711 apply (pdb CDB$ROOT): SUCCESS
 
Patch 39093711 apply (pdb PDB$SEED): SUCCESS
 
Patch 39093711 apply (pdb DATACLAWPDB): SUCCESS
 
SQL Patching tool complete on Fri Jul 17 10:45:21 2026
 

之后编译无效对象:

 
 
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -e -b utlrp -d $ORACLE_HOME/rdbms/admin utlrp.sql
 

最后登录确认版本和 PDB 状态:

 
 
SQL*Plus: Release 23.26.2.0.0 - Production on Fri Jul 17 10:48:08 2026
 
Version 23.26.2.0.0
 
 
 
Connected to:
 
Oracle AI Database 26ai Enterprise Edition Release 23.26.2.0.0 - Production
 
Version 23.26.2.0.0
 
 
 
SQL> show pdbs;
 
 
 
CON_ID CON_NAME OPEN MODE RESTRICTED
 
---------- ------------------------------ ---------- ----------
 
2 PDB$SEED READ ONLY NO
 
3 DATACLAWPDB READ WRITE NO
 

这次问题的核心很简单:OPatch 提示的空间需求不是最终唯一标准,实际 apply 过程还需要额外余量。对于接近临界值的 /opt,先扩容再打补丁,处理过程会更稳。