1 当前环境
[grid@www.cndba.cn ~]$ crsctl query crs softwareversion
Oracle Clusterware version on node [rac1] is [19.0.0.0.0]
[grid@www.cndba.cn ~]$ crsctl query crs releaseversion
Oracle High Availability Services release version on the local node is [19.0.0.0.0]
[grid@www.cndba.cn ~]$ 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
[grid@www.cndba.cn ~]$
[grid@www.cndba.cn OPatch]$ ./opatch lspatches
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
29517247;ACFS RELEASE UPDATE 19.3.0.0.0 (29517247)
29517242;Database Release Update : 19.3.0.0.190416 (29517242)
29401763;TOMCAT RELEASE UPDATE 19.0.0.0.0 (29401763)
OPatch succeeded.
[grid@www.cndba.cn OPatch]$
2 更新OPatch工具
两个节点的GI和DB HOME的OPatch 都需要更换。
--GI:
[root@www.cndba.cn grid]# mv /u03/app/19.3.0/grid/OPatch /u03/app/19.3.0/grid/OPatch.bak
[root@www.cndba.cn grid]# unzip -q /u01/software/p6880880_190000_Linux-x86-64-12.2.0.1.47.zip -d /u03/app/19.3.0/grid
[root@www.cndba.cn grid]# chmod -R 755 /u03/app/19.3.0/grid/OPatch
[root@www.cndba.cn grid]# chown -R grid:oinstall /u03/app/19.3.0/grid/OPatch
--DB:
[root@www.cndba.cn grid]# mv /u03/app/oracle/product/19.3.0/db_1/OPatch /u03/app/oracle/product/19.3.0/db_1/OPatch.bak
[root@www.cndba.cn grid]# unzip -q /u01/software/p6880880_190000_Linux-x86-64-12.2.0.1.47.zip -d /u03/app/oracle/product/19.3.0/db_1
[root@www.cndba.cn grid]# chmod -R 755 /u03/app/oracle/product/19.3.0/db_1/OPatch
[root@www.cndba.cn grid]# chown -R oracle:oinstall /u03/app/oracle/product/19.3.0/db_1/OPatch
[root@www.cndba.cn grid]# /u03/app/oracle/product/19.3.0/db_1/OPatch/opatch version
OPatch Version: 12.2.0.1.47
OPatch succeeded.
[root@www.cndba.cn grid]#
3 验证Oracle Inventory的有效性
GI HOME 和DB HOME 都需要验证,分别使用grid和oracle用户执行如下命令,确保返回SUCCESS:
$ <ORACLE_HOME>/OPatch/opatch lsinventory -detail -oh <ORACLE_HOME>
GRID 用户:
[grid@www.cndba.cn OPatch]$ $ORACLE_HOME/OPatch/opatch lsinventory -detail -oh $ORACLE_HOME
Oracle 用户:
[oracle@www.cndba.cn ~]$ $ORACLE_HOME/OPatch/opatch lsinventory -detail -oh $ORACLE_HOME
4 下载19.28 的RU
Quick Reference to Patch Numbers for Database/GI PSU, SPU(CPU), Bundle Patches and Patchsets (文档 ID 1454618.1)
[oracle@www.cndba.cn software]$ tree
.
├── 37957391 [error opening dir]
├── p37847857_190000_Linux-x86-64-OJVM.zip
├── p37957391_190000_Linux-x86-64-GI.zip
├── p37960098_190000_Linux-x86-64-DB.zip
├── p6880880_190000_Linux-x86-64-12.2.0.1.47.zip
└── PatchSearch.xml
5 检查Patch 冲突
19.28 的GI RU里包含GI和DB的补丁,需要分别进行检测,在检测之前需要先修改权限,否则会报错。
GRID 用户执行:
chown grid:oinstall /u03/software/37957391 -R
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u03/software/37957391/37960098
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u03/software/37957391/37962946
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u03/software/37957391/37962938
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u03/software/37957391/38124772
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u03/software/37957391/36758186
Oracle 用户执行:
chown oracle:oinstall /u03/software/37957391 -R
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u03/software/37957391/37960098
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u03/software/37957391/37962946
Oracle 用户检查OJVM:
[root@www.cndba.cn software]# chown oracle:oinstall 37847857 -R
[oracle@www.cndba.cn ~]$ cd /u03/software/37847857
[oracle@www.cndba.cn 37847857]$ /u03/app/oracle/product/19.3.0/db_1/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
6 检查系统空间
GRID用户操作:
创建/tmp/patch_list_gihome.txt 文件,并添加如下内容:
[grid@www.cndba.cn ~]$ cat /tmp/patch_list_gihome.txt
/u03/software/37957391/37960098
/u03/software/37957391/37962946
/u03/software/37957391/37962938
/u03/software/37957391/38124772
/u03/software/37957391/36758186
运行opatch命令检查GI HOME下是否有足够的空间:
[grid@www.cndba.cn ~]$ chown grid:oinstall /u03/software/37957391 -R
[grid@www.cndba.cn ~]$ $ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt
ORACLE 用户操作:
创建文件/tmp/patch_list_dbhome.txt并添加如下内容:
[oracle@www.cndba.cn ~]$ cat /tmp/patch_list_dbhome.txt
/u03/software/37957391/37960098
/u03/software/37957391/37962946
运行opatch命令检查DB HOME下是否有足够的空间:
[oracle@www.cndba.cn ~]$ chown oracle:oinstall /u03/software/37957391 -R
[oracle@www.cndba.cn ~]$ $ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_dbhome.txt
7 安装前分析
在19.28 的README 中建议使用如下命令:
安装前:
cluvfy stage -pre patch
安装后:
cluvfy stage -post patch
我们这里还是按照之前的方式使用analyze分析,"-analyze"选项可以模拟OPatchauto apply,提前检查所有检查项目,但不会真正改变系统。
GI+DB分析:root用户执行,大约7分钟:
[root@www.cndba.cn software]# chown grid:oinstall 37957391 -R
[root@www.cndba.cn software]# /u03/app/19.3.0/grid/OPatch/opatchauto apply /u03/software/37957391 -analyze
……
Executing OPatch prereq operations to verify patch applicability on home /u03/app/19.3.0/grid
Executing OPatch prereq operations to verify patch applicability on home /u03/app/oracle/product/19.3.0/db_1
……
这个命令会同时校验GI和DB。
8 应用GI 的RU
这里将GI和DB 分开打补丁。补丁安装顺序:GI —> DB —> OJVM。
注意:
- GI 和 DB 都是在root 用户下操作,使用全路径,不要使用Path。
- 对应的Patch文件要先修改成对应的用户组。
- 打gi要用gi_home的opatchauto,打oracle用oracle_home的opatchauto。
- ojvm 需要用oracle 操作。
- 补丁过程如果报错,可以根据错误修复,然后使用resume,表示接着上次失败的地方继续安装的意思。
[root@www.cndba.cn software]# /u03/app/19.3.0/grid/OPatch/opatchauto resume
这里先打rac1的GI,完成后再打rac2。
8.1 节点1执行
我这里配置较低,执行了20分钟,生产估计15分钟左右。
[root@www.cndba.cn software]# chown grid:oinstall /u03/software/37957391 -R
[root@www.cndba.cn software]# /u03/app/19.3.0/grid/OPatch/opatchauto apply /u03/software/37957391 -oh /u03/app/19.3.0/grid
……
Performing prepatch operations on CRS - bringing down CRS service on home /u03/app/19.3.0/grid
Prepatch operation log file location: /u03/app/grid/crsdata/rac1/crsconfig/crs_prepatch_apply_inplace_rac1_2025-07-23_02-08-23PM.log
CRS service brought down successfully on home /u03/app/19.3.0/grid
Start applying binary patch on home /u03/app/19.3.0/grid
Binary patch applied successfully on home /u03/app/19.3.0/grid
Running rootadd_rdbms.sh on home /u03/app/19.3.0/grid
Successfully executed rootadd_rdbms.sh on home /u03/app/19.3.0/grid
Performing postpatch operations on CRS - starting CRS service on home /u03/app/19.3.0/grid
……
注意:
打的过程会自动关闭节点1的crs,节点2正常运行。
检查GI是否成功:
[grid@www.cndba.cn ~]$ /u03/app/19.3.0/grid/OPatch/opatch lspatches
38124772;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38124772)
37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
37962938;ACFS RELEASE UPDATE 19.28.0.0.0 (37962938)
37960098;Database Release Update : 19.28.0.0.250715 (37960098)
36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)
8.2 节点2执行
[root@www.cndba.cn software]# chown grid:oinstall /u03/software/37957391 -R
[root@www.cndba.cn software]# /u03/app/19.3.0/grid/OPatch/opatchauto apply /u03/software/37957391 -oh /u03/app/19.3.0/grid
8.3 查看Patch
检查GI是否成功:
[grid@www.cndba.cn ~]$ /u03/app/19.3.0/grid/OPatch/opatch lspatches
38124772;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38124772)
37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
37962938;ACFS RELEASE UPDATE 19.28.0.0.0 (37962938)
37960098;Database Release Update : 19.28.0.0.250715 (37960098)
36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)
9 应用DB 的RU 和 OJVM
同样先打rac1的DB HOME,完成后再打rac2。
注意:
- 需要使用oracle用oracle_home的opatchauto。
- 使用root用户执行。
- 修改pathch 的owner。
- DB RU 和 OJVM都需要先停掉对应的db 实例,否则会报错。
pathch 文件可以直接使用GI里面的,也可以使用单独下载的,都一样。
OJVM 补丁属于数据库层组件,与 Java 虚拟机相关的数据库功能(如 DBMS_JAVA)直接关联。因此补丁作用于数据库实例的 ORACLE_HOME 目录。 使用ORACLE HOME执行。
9.1 节点1执行
9.1.1 停实例
[grid@www.cndba.cn ~]$ srvctl stop instance -node rac1
9.1.2 打DB RU
我这里配置较低,执行了13分钟,生产估计10分钟以内。
[root@www.cndba.cn software]# chown oracle:oinstall /u03/software/37957391/37960098 -R
[root@www.cndba.cn software]# /u03/app/oracle/product/19.3.0/db_1/OPatch/opatchauto apply /u03/software/37957391/37960098 -oh /u03/app/oracle/product/19.3.0/db_1
……
OPatchauto session completed at Wed Jul 23 16:00:59 2025
Time taken to complete the session 13 minutes, 32 seconds
如果有报错,修复错误,在继续:
[root@www.cndba.cn 37957391]# export ORACLE_HOME=/u03/app/oracle/product/19.3.0/db_1
[root@www.cndba.cn 37957391]# /u03/app/oracle/product/19.3.0/db_1/OPatch/opatchauto resume
9.1.3 打OJVM
[oracle@www.cndba.cn 37847857]$ pwd
/u03/software/37847857
[oracle@www.cndba.cn 37847857]$ /u03/app/oracle/product/19.3.0/db_1/OPatch/opatch apply
按提示输入y,y,10分钟左右结束。
这里如果报错,修复后直接重复执行apply即可,没有resume选项。
9.1.4 启动实例
然后启动rac1实例,在去打节点2,保障业务不中断:
[grid@www.cndba.cn ~]$ srvctl start instance -node rac1
9.1.5 查看Patch
[oracle@www.cndba.cn 37847857]$ /u03/app/oracle/product/19.3.0/db_1/OPatch/opatch lspatches
37847857;OJVM RELEASE UPDATE: 19.28.0.0.250715 (37847857)
37960098;Database Release Update : 19.28.0.0.250715 (37960098)
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
OPatch succeeded.
[oracle@www.cndba.cn 37847857]$
9.2 节点2执行
节点2操作和节点1一样。 我们这里简单记录命令。
[grid@www.cndba.cn ~]$ srvctl stop instance -node rac2
[root@www.cndba.cn software]# chown oracle:oinstall /u03/software/37957391/37960098 -R
[root@www.cndba.cn software]# /u03/app/oracle/product/19.3.0/db_1/OPatch/opatchauto apply /u03/software/37957391/37960098 -oh /u03/app/oracle/product/19.3.0/db_1
[root@www.cndba.cn software]# chown oracle:oinstall 37847857 -R
[oracle@www.cndba.cn 37847857]$ pwd
/u03/software/37847857
[oracle@www.cndba.cn 37847857]$ /u03/app/oracle/product/19.3.0/db_1/OPatch/opatch apply
[grid@www.cndba.cn ~]$ srvctl start instance -node rac2
9.3 加载SQL到数据库
RAC环境,只需要在一个节点执行就可以了。我们这里在节点1中执行。
注意:
- 使用Oracle 用户执行
- 需要打开所有PDB,未打开的PDB不会生效。
[oracle@www.cndba.cn ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jul 23 17:00:18 2025
Version 19.28.0.0.0
SQL> alter pluggable database all open;
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
这里需要执行40分钟左右:
[oracle@www.cndba.cn ~]$ $ORACLE_HOME/OPatch/datapatch -verbose
……
Installation queue:
For the following PDBs: CDB$ROOT PDB$SEED DAVE
No interim patches need to be rolled back
Patch 37960098 (Database Release Update : 19.28.0.0.250715 (37960098)):
Apply from 19.3.0.0.0 Release_Update 190410122720 to 19.28.0.0.0 Release_Update 250705030417
The following interim patches will be applied:
37847857 (OJVM RELEASE UPDATE: 19.28.0.0.250715 (37847857))
……
我们这里有2个补丁,队列逐个执行的。
如果有未打开的,需要open pdb后手工指定pdb 来加载:
$ORACLE_HOME/OPatch/datapatch -verbose -apply 37960098 -force -pdbs <pdbname>
$ORACLE_HOME/OPatch/datapatch -verbose -apply 37847857 -force -pdbs <pdbname>
9.4 处理无效对象
datapatch命令会加载SQL,这个过程可能会产生无效对象。
如下两种方法都可以修复无效对象,任选一个。
方法一:
[oracle@www.cndba.cn oneoffs]$ cd $ORACLE_HOME/rdbms/admin
[oracle@www.cndba.cn admin]$ sqlplus / as sysdba
@$ORACLE_HOME/rdbms/admin/utlrp.sql
方法二:
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -e -b utlrp -d $ORACLE_HOME/rdbms/admin $ORACLE_HOME/rdbms/admin/utlrp.sql
10 验证版本
10.1 GI
[grid@www.cndba.cn ~]$ /u03/app/19.3.0/grid/OPatch/opatch lspatches
38124772;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38124772)
37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
37962938;ACFS RELEASE UPDATE 19.28.0.0.0 (37962938)
37960098;Database Release Update : 19.28.0.0.250715 (37960098)
36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)
OPatch succeeded.
10.2 DB
[oracle@www.cndba.cn 37847857]$ /u03/app/oracle/product/19.3.0/db_1/OPatch/opatch lspatches
37847857;OJVM RELEASE UPDATE: 19.28.0.0.250715 (37847857)
37960098;Database Release Update : 19.28.0.0.250715 (37960098)
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
OPatch succeeded.
[oracle@www.cndba.cn 37847857]$
set linesize 180
col action for a15
col status for a15
select PATCH_ID,PATCH_TYPE,ACTION,STATUS,TARGET_VERSION from dba_registry_sqlpatch;
PATCH_ID PATCH_TYPE ACTION STATUS TARGET_VERSION
---------- -------------------- --------------- --------------- ------------------------------
29517242 RU APPLY SUCCESS 19.3.0.0.0
37847857 INTERIM APPLY SUCCESS 19.28.0.0.0
37960098 RU APPLY SUCCESS 19.28.0.0.0
版权声明:本文为博主原创文章,未经博主允许不得转载。