Oracle 19c RAC安装升级补丁 操作系统: CentOS Linux release 7.6.1810 Oracle版本: 19.3.0 GIRU版本: 19.12.0.0.210720
一、OPatch检查和更新
注意:所有节点分别操作
grid用户
确保OPatch版本在12.2.0.1.25以上 $ opatch version
OPatch版本不符合需求,需要更新6880880补丁
将6880880补丁下载,并解压 $ unzip -o “6880880.zip”
切换至GI_HOME目录(GRID用户下的OPatch替换须用root用户操作)
cd $GI\_HOME
mv OPatch OPatch\_old
cp <6880880\_path> $GI\_HOME/.
chown -R grid.oinstall $GI\_HOME/OPatch ---注意不要覆盖掉$GI\_HOME的权限
验证OPatch版本 $ opatch version
Oracle用户
$ opatch version
OPatch版本不符合需求,需要更新6880880补丁
将6880880补丁下载,并解压 $ unzip -o “6880880.zip”
切换至ORACLE_HOME目录
cd $ORACLE\_HOME
mv OPatch OPatch\_old
cp <6880880\_path> $ORACLE\_HOME/.
chown -R oracle.oinstall $ORACLE\_HOME/OPatch ---注意不要覆盖掉
$ORACLE_HOME的权限
验证OPatch版本 $ opatch version
二、验证Oracle Inventory的有效性
注意:所有节点都操作,以节点1为例。
GI HOME 和DB HOME 都需要验证,分别使用grid和oracle用户执行如下命令,确保返回SUCCESS。
grid用户
$ORACLE\_HOME/OPatch/opatch lsinventory -detail -oh $ORACLE\_HOME
oracle用户
$ORACLE\_HOME/OPatch/opatch lsinventory -detail -oh $ORACLE\_HOME
满足需求(grid、db都要替换,db替换不需要用root用户,每个节点都需要替换)
三、运行 OPatch 冲突检查
注意:所有节点都操作
进行补丁验证(grid用户下)
cd /u01/app/19.3.0/grid/OPatch/
$ORACLE\_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /tmp/32895426/32904851
$ORACLE\_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /tmp/32895426/32916816
$ORACLE\_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /tmp/32895426/32915586
$ORACLE\_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /tmp/32895426/32918050
$ORACLE\_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /tmp/32895426/32585572
进行补丁验证(Oracle用户下)
$ORACLE\_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /tmp/32895426/32904851
$ORACLE\_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /tmp/32895426/32916816
如果补丁验证通过会有以下提示:
五、运行opatch命令检查GI HOME下是否有足够的空间
注意:所有节点都操作
Check if enough free space is available on the ORACLE_HOME filesystem for the patches to be applied as given below:
For Grid Infrastructure Home, as home user:
Create file /tmp/patch_list_gihome.txt with the following content:
% cat /tmp/patch\_list\_gihome.txt
/tmp/32895426/32904851
/tmp/32895426/32916816
/tmp/32895426/32915586
/tmp/32895426/32918050
/tmp/32895426/32585572
Run the opatch command to check if enough free space is available in the Grid Infrastructure Home:
% $ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt For Database home, as home user:
Create file /tmp/patch_list_dbhome.txt with the following content:
% cat /tmp/patch\_list\_dbhome.txt
/tmp/32895426/32904851
/tmp/32895426/32916816
Run opatch command to check if enough free space is available in the Database Home:
% $ORACLE\_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch\_list\_dbhome.txt
六、补丁冲突检测与解决 The following commands check for conflicts in both the 12.1 GI home and the 12.1 DB homes.
In case you are applying the patch, run this command:
#/u01/app/19.3.0/grid/OPatch/opatchauto apply /tmp/32895426 -analyze
In case you are rolling back the patch, run this command:
#GRID\_HOME/OPatch/opatchauto rollback <UNZIPPED\_PATCH\_LOCATION>/32895426 -analyze
在DB HOME的版本和GI HOME的版本一致的情况下,可以使用root用户执行opatchauto命令一次对GI和DB HOME进行patch操作。如果GI和DB HOME版本不同,可以使用opatchauto分别进行patch动作。 注意一点:这里的RU补丁,一定要用grid用户来解压缩,否则执行opatchauto的时候回报OPatch Prerequisite check “CheckApplicable” failed的错误。
七、使用root用户应用补丁【节点1打完,再打节点2】
使用opatchauto 对于RAC环境,可以使用OPatchAuto一键安装补丁(OPatchAuto 需要使用root用户) 配置环境变量
export ORACLE\_BASE=/u01/app/grid export
ORACLE\_HOME=/u01/app/19.3.0/grid
export PATH=/u01/app/19.3.0/grid/bin:/u01/app/19.3.0/grid/OPatch:$PATH
或者vim .bash\_profile
export ORACLE\_BASE=/oracle/app/grid
export ORACLE\_HOME=/oracle/app/19.0.0/grid
export PATH=${ORACLE\_HOME}/bin:${ORACLE\_HOME}/OPatch:${PATH}
加载环境变量
source .bash_profile
安装补丁
opatchauto apply /tmp/32895426 —使用opatchauto不需要停机
第二个节点 首次安装会报错,安装补丁前检查一下/oracle/app/oraInventory/ContentsXML/路径下文件权限是否与1节点一致,不一致的话改成与一节点一致,可能就不会出错了
Start applying binary patch on home /u01/app/oracle/product/19.3.0/db_1 这一步oui-patch.xml文件会出现 可以文件出现就修改权限
\[grid@p19node1 ContentsXML\]$ pwd
/u01/app/oraInventory/ContentsXML
节点1正常情况
\[grid@p19node1 ContentsXML\]$ ll
\-rw-rw---- 1 grid oinstall 300 Jan 25 15:57 comps.xml
\-rw-rw---- 1 grid oinstall 557 Nov 29 12:42 inventory.xml
\-rw-rw---- 1 grid oinstall 292 Jan 25 15:57 libs.xml
\-rw-rw---- 1 grid oinstall 174 Jan 25 15:57 oui-patch.xml
节点2 权限不够的情况
\[grid@p19node2 ContentsXML\]$ ll
total 16
\-rw-rw---- 1 grid oinstall 300 Jan 25 16:36 comps.xml
\-rw-rw---- 1 grid oinstall 557 Nov 29 12:46 inventory.xml
\-rw-rw---- 1 grid oinstall 292 Jan 25 16:36 libs.xml
\-rw-r--r-- 1 oracle oinstall 174 Jan 25 16:36 oui-patch.xml
补丁安装后说明在数据库端执行以下指令
确保所有pdb是open状态
alter pluggable database all open;
将修改后的 SQL 文件加载到数据库中
注意:在任一节点操作
cd $ORACLE\_HOME/OPatch
./datapatch -verbose
cd $ORACLE\_HOME/rdbms/admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> @utlrp.sql
八、验证升级版本
检查gi是否成功
$ORACLE\_HOME/OPatch/opatch lspatches
检查db是否成功
$ORACLE\_HOME/OPatch/opatch lspatches
节点1验证 grid用户验证
\[grid@p19node1 ~\]$ $ORACLE\_HOME/bin/kfod op=patches
List of Patches
32585572
32904851
32915586
32916816
32918050
\[grid@p19node1 ~\]$
\[grid@p19node1 ~\]$ $ORACLE\_HOME/bin/kfod op=patchlvl
Current Patch level
3998055650
\[grid@p19node1 ~\]$ $ORACLE\_HOME/OPatch/opatch lspatches
32918050;TOMCAT RELEASE UPDATE 19.0.0.0.0 (32918050)
32916816;OCW RELEASE UPDATE 19.12.0.0.0 (32916816)
32915586;ACFS RELEASE UPDATE 19.12.0.0.0 (32915586)
32904851;Database Release Update : 19.12.0.0.210720 (32904851)
32585572;DBWLM RELEASE UPDATE 19.0.0.0.0 (32585572)
oracle用户验证
\[oracle@p19node1 ~\]$ $ORACLE\_HOME/OPatch/opatch lspatches
32916816;OCW RELEASE UPDATE 19.12.0.0.0 (32916816)
32904851;Database Release Update : 19.12.0.0.210720 (32904851)
OPatch succeeded.
\[oracle@p19node1 ~\]$ sqlplus / as sysdba
SQL\*Plus: Release 19.0.0.0.0 - Production on Tue Feb 22 11:15:09 2022 Version 19.12.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.12.0.0.0
SYS@db19c1>
SYS@db19c1>col action for a15
SYS@db19c1>col status for a15
SYS@db19c1>select patch\_id,patch\_type,action,status,target\_version from dba\_registry\_sqlpatch;
PATCH\_ID PATCH\_TYPE ACTION STATUS TARGET\_VERSION
PATCH\_ID PATCH\_TYPE ACTION STATUS TARGET\_VERSION
\---------- ---------- --------------- --------------- ---------------
29517242 RU APPLY SUCCESS 19.3.0.0.0
32904851 RU APPLY SUCCESS 19.12.0.0.0
SYS@db19c1>




