点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
本文更打Patch 32900083为示例,未测试,仅供参考。
1. GI补丁现状
$ORACLE_HOME/OPatch/opatch lsinventory > /tmp/grid_patch.txt
$ORACLE_HOME/OPatch/opatch lsinv -detail -oh $ORACLE_HOME >> /tmp/grid_patch.txt
$ORACLE_HOME/OPatch/opatch lspatches >> /tmp/grid_patch.txt
2. DB补丁现状
$ORACLE_HOME/OPatch/opatch lsinventory > /tmp/oracle_patch.txt
$ORACLE_HOME/OPatch/opatch lsinv -detail -oh $ORACLE_HOME >> /tmp/oracle_patch.txt
$ORACLE_HOME/OPatch/opatch lspatches >> /tmp/oracle_patch.txt
3. DB组件现状
sqlplus as sysdba
spool tmp/database_invalid.sql
set lines 200 pages 2000;
show parameter name;
col comp_id for a20;
col version for a20;
col status for a30;
select comp_id,version,status from dba_registry;
select owner,object_type,object_name from dba_objects where status<>'VALID';
col ACTION_TIME for a20;
col action for a15;
col DESCRIPTION for a25;
col status for a20;
col BUNDLE_SERIES for a15;
select patch_id,action,action_time,description,status,version,patch_uid,BUNDLE_SERIES,BUNDLE_ID from registry$sqlpatch order by action_time;
spool off;
4. 集群资源现状
$crsctl check crs
crsctl check cluster -all
$crsctl status res –t
5. 监听服务现状
$lsnrctl status
1. 当前版本信息
$ORACLE_HOME/OPatch/opatch version
2. 新版本更新
su - grid
cd u01/app/19.0.0.0/grid #$GI_HOME
mv OPatch OPatch_bak2022
cd u01/soft
unzip p6880880_190000_Linux-x86-64.zip -d u01/app/19.0.0.0/grid #解压后注意权限
$ORACLE_HOME/OPatch/opatch version
su - oracle
cd u01/app/oracle/product/19.0.0.0 #ORACLE_HOME
mv OPatch OPatch_bak2022
cd u01/sot
unzip p6880880_190000_Linux-x86-64.zip -d u01/app/oracle/product/19.0.0.0 #解压后注意权限
$ORACLE_HOME/OPatch/opatch version
1. 补丁软件验证
su - grid
/u01/app/19.0.0.0/grid/OPatch/opatchauto apply u01/software/patch/32900083/32895426 -oh u01/app/19.0.0.0/grid –analyze
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir u01/software/patch/32900083/32895426/32904851
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir u01/software/patch/32900083/32895426/32916816
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir u01/software/patch/32900083/32895426/32915586
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir u01/software/patch/32900083/32895426/32918050
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir u01/software/patch/32900083/32895426/32585572
su - oracle
/u01/app/oracle/product/19.0.0.0/OPatch/opatchauto apply u01/software/patch/32900083/32895426 -oh u01/app/oracle/product/19.0.0.0 -analyze
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir u01/software/patch/32900083/32895426/32904851
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir u01/software/patch/32900083/32895426/32916816
2. one-off补丁冲突处理
3. 其他冲突处理
可以根据相关报错信息寻找解决方案。
1. 清除GI日志
2. 清除DB日志
3. 备份软件目录
>>>>停库
srvctl stop database -db stbcrma
>>>>各个节点依次停集群
#crsctl stop crs
>>>>确认是否还有grid,oracle进程,如果有kill掉
ps -ef |grep oracle
ps -ef | grep grid
>>>>备份整个目录(GI,ORACLE,ORAINVENTORY)
>>>>使用root用户备份
>>>>节点1
tar -zcvf u01/ stbcrma01nb.tar u01/app/* -p -P
>>>>节点2
tar -zcvf u01/ stbcrma02nb.tar u01/app/* -p -P
4. 补丁空间验证
>>>>使用grid用户检查空间是否满足GIRU部署
$ vi tmp/patch_list_gihome.txt
/u01/software/patch/32900083/32895426/32904851
/u01/software/patch/32900083/32895426/32916816
/u01/software/patch/32900083/32895426/32915586
/u01/software/patch/32900083/32895426/32918050
/u01/software/patch/32900083/32895426/32585572
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt
>>>>使用oracle用户检查系统空间是否满足DBRU的部署
$ vi /tmp/patch_list_dbhome.txt
/u01/software/patch/32900083/32895426/32904851
/u01/software/patch/32900083/32895426/32916816
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_dbhome.txt
1. 各节点GI补丁依次更打且验证
>>>>将集群启动
#crsctl start crs
>>>>使用root用户安装部署GIRU补丁,各个节点依次更打
#/u01/app/19.0.0.0/grid/OPatch/opatchauto apply /u01/software/patch/32900083/32895426/ -oh /u01/app/19.0.0.0/grid
>>>>部署成功之后进行验证
su - grid
$ORACLE_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lsinventory
$ORACLE_HOME/OPatch/opatch lspatches -id 32904851 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 32916816 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 32915586 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 32918050 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 32585572 -verify
2. 各节点DB补丁依次更打且验证
>>>>安装ORACLE RDBMS补丁[使用root用户]
>>>>使用root用户操作,部署DBRU,各节点依次更打
/u01/app/oracle/product/19.0.0.0/OPatch/opatchauto apply /u01/software/patch/32900083/32895426/ -oh /u01/app/oracle/product/19.0.0.0
>>>>补丁验证[使用oracle用户]
su - oracle
$ORACLE_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lsinventory
$ORACLE_HOME/OPatch/opatch lspatches -id 32904851 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 32916816 -verify
各节点依次更打
>>>所有节点GI、DB补丁全部更打完成之后,再开展OJVM补丁更打
>>>>停集群
crsctl stop crs
>>>>应用OJVM补丁,各节点依次更打
cd /u01/software/patch/32900083/32876380
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
opatch apply
>>>>查看补丁
opatch lspatches
>>>>启动集群
#crsctl start crs
su – oracle
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> alter system set cluster_database=false scope=spfile;
SQL> shutdown immediate
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP UPGRADE
SQL> exit
$ cd $ORACLE_HOME/OPatch
$ ./datapatch -verbose
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> alter system set cluster_database=true scope=spfile;
SQL> SHUTDOWN IMMEDIATE
>>>>启动数据库
$ORACLE_HOME/bin/srvctl start database -db stbcrma
1. GI验证
$ORACLE_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lsinventory
2. DB验证
$ORACLE_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lsinventory
set lines 200 pages 2000;
show parameter name;
col comp_id for a20;
col version for a20;
col status for a30;
select comp_id,version,status from dba_registry;
select owner,object_type,object_name from dba_objects where status<>'VALID';
>>>有些包如果是无效对象,运行下面脚本(选做,和补丁之前对比)
cd $ORACLE_HOME/rdbms/admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> @utlrp.sql
col ACTION_TIME for a20;
col action for a15;
col DESCRIPTION for a25;
col status for a20;
col BUNDLE_SERIES for a15;
select patch_id,action,action_time,description,status,version,patch_uid,BUNDLE_SERIES,BUNDLE_ID from registry$sqlpatch order by action_time;
3. 集群资源验证
#crsctl check crs
$crssctl status res -t
$lsnrctl status

本文作者:汪声新(上海新炬中北团队)
本文来源:“IT那活儿”公众号





