oracle打补丁最常见原因为bug修复或安全迎检漏洞修复需要打到最新的补丁版本。下文的经验之谈是基于rac环境,19c版本的最新补丁集的过程分享。
可以参考《Assistant:Download Reference for Oracle Database/GI Update, Revision, PSU,SPU(CPU), Bundle Patches, Patchsets and Base Releases (Doc ID2118136.2)》来下载补丁集,打开的页面中,我们可以选择下载db的基础版本,db补丁集和ojvm的补丁集等。
下图是基于19c版本今年7月份发布的19.8的补丁集。DatabaseUpdate只包含db补丁包,GIUpdate则既包含GI的补丁包也包含db的补丁包,具体的可以按需来进行下载。
软件的备份:备份重于一切,这是我们做变更的基础,一定要给自己留后路。在做补丁更新前,我们必须需对oracle软件进行备份(GI和DB)。
以下给出命令示例:
--关闭集群CRS,各个节点依次关闭 su – oracle srvctl stop database -d xxxx ==>手工停所有节点实例 su - root crsctl stop crs crsctl start crs ==》该步骤选做,验证crs能否正常启动 crsctl stop crs ps -ef | grep grid ==> 有进程kill掉 ps -ef | grep oracle ==> 有进程kill掉 --备份各节点软件目录 su - root tar -zcvf /u01/oracle20200813.tar /u01/app/* -p -P ==>可以多带带对GI和DB的软件目录进行备份。这里为了方便操作对整个目录进行备份。备份前注意清理小文件(audit,trace等) --还原 --停掉crs服务 --解tar cd /u01 mv app appbak tar -xvf /u01/oracle20200813.tar -C /u01/ |
DB信息的备份
>>>>使用grid用户检查当前GI的补丁情况,监听状态 crsctl status res -t > /home/grid/crs.txt $ORACLE_HOME/OPatch/opatch lsinventory >> /home/grid/grid_patch.txt $ORACLE_HOME/OPatch/opatch lsinv -detail -oh $ORACLE_HOME >> /home/grid/grid_patch.txt $ORACLE_HOME/OPatch/opatch lspatches >> /home/grid/grid_patch.txt lsnrctl status >> /home/grid/crs.txt >>>>使用oracle用户检查当前oracle的补丁情况 su - oracle $ORACLE_HOME/OPatch/opatch lsinventory > /home/oracle/oracle_patch.txt $ORACLE_HOME/OPatch/opatch lsinv -detail -oh $ORACLE_HOME >> /home/oracle/oracle_patch.txt $ORACLE_HOME/OPatch/opatch lspatches >> /home/oracle/oracle_patch.txt >>>>使用oracle用户,在其中一个节点登录到所有实例当中进行查询,记录补丁、无效对象相关信息 sqlplus / as sysdba spool /home/oracle/db0813.txt 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; select patch_id,patch_uid,status,action_time from dba_registry_sqlpatch; spool off |
主要调用该工具OPatchAuto和Datapatch这2个命令。简单的可以理解为OPatchAuto更新软件相关文件,Datapatch用于更新数据库字典(dba_registry_sqlpatch)。
详细的信息我们可以参考如下文章:
Datapatch:Database 12c or later Post Patch SQL Automation (Doc ID 1585822.1)
DatapatchUser Guide (Doc ID 2680521.1)
该文件为补丁说明书,必读项。可以在下载补丁包或者在下载页面的ReadMe的按钮(如下图)里找到。
下面提取今年7月份发布的19.8的GI补丁集的readme中的关键主题来分析下:
readme中会有明确的字眼提示adg是否可以先更打,如下图:
下图中有4个patchnumber,其中GI_HOME都要更打,DB_HOME只要更打2个。从这里大致应该就能估算出打GI补丁的时间要比DB补丁多一半,可以估算出要停机的时间。
Readme中会有明确的字眼要求OPatch的最低版本,如下图:
参考该文章来下载需要的opatch工具:MasterNote For OPatch (Doc ID 293369.1)
Readme中给出具体命令,如下图,我们补全拿到环境中执行就行。
我们主要关注跑出来的结果,如果提示成功没报错,那这一环节就可以不做处理。如果有报错,那就需要提前准备解决方案,比如下面这个示例:
注:运行该命令对现有环境不影响,需要提前执行,以便有报错提前准备解决方案,避免和维护窗口时间冲突。
提前检查空间是否足够,如下图,我们补全拿到环境中执行就行。
这里的冲突可以是小补丁和小补丁之间的冲突,也可以是小补丁和补丁集之间的冲突。有2个解决思路,一个是提SR申请冲突小补丁的merge补丁,这个等待时间可能比较久。另外一个思路,就是更打较新的补丁集,一般最新发布的补丁集都会包含之前小补丁,那这块就需要拿补丁集去确认了。
小补丁和补丁集之间的冲突:这块处理起来比较方便,比如说当前安装的是4月份补丁集,我们现在要更打到7月份的补丁集。那现在可以将4月份补丁集上的小补丁先回滚掉,待7月份的补丁集更打完成后,再更打基于7月份补丁集的这个小补丁。
使用opatchauto命令去更打补丁,一般GI和DB都分开更打。可以根据readme中提供命令进行补全(如下图),整合出适合自己环境的命令。
以下给出命令示例:
>>>GI各个节点依次执行打补丁命令 # /u01/app/19.0.3/grid/OPatch/opatchauto apply /u01/software/patch2020/31305339 -oh /u01/app/19.0.3/grid >>>DB各个节点依次执行打补丁命令 #/u01/app/oracle/product/19.0.3/dbhome_1/OPatch/opatchauto apply /u01/software/patch2020/31305339 -oh /u01/app/oracle/product/19.0.3/dbhome_1 |
关于数据字典更新操作,根据补丁的readme中提供的命令补全即可:
下图是补丁集更打后的操作:
下图是OJVM补丁更打后的操作:
以下命令是补丁集+OJVM的数据字典更新(也是说只跑一次datapatch)的示例(adg端不跑),更参考:
####Loading Modified SQL Files Into the Database sqlplus /nolog SQL> CONNECT / AS SYSDBA SQL> STARTUP nomount 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 immedite $srvctl start database -db xxx |
其实做好前期准备工作,基本是成功的几率就很高了,如果还有报错,可能就是遇到bug或者其他问题了。那就只能临时去找解决方案了,如果最终拖的时间比较长,维护窗口时间有限,最后也就只能回退了。分享2个简单报错示例:下图是一个进程占用报错的示例,可以通过fuser命令来确认占用进程,kill掉就行:
下图是一个节点间互信问题的报错示例:
做好打补丁前准备工作,工作量就已完成了大半。这里粗略做以下总结:
备份重于一切,一定要对软件进行备份。
集群间通信检查,确认命令为:crsctl check cluster -all
grid、oracle节点间互信检查
补丁包权限检查、opatch版本检查、补丁冲突检查
临时问题解决要依托第一案场“证据”顺藤摸瓜
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130146.html
集成安装之Oracle12C补丁升级数据字典更新报错处理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...
RAC补丁日常更新成功反遇异常处理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; m...
摘要:就在昨天,发布了新版的我相信很多开发人员沉溺在编码的乐趣中,还没注意到相关消息。 就在昨天,Oracle发布了新版的JDK 11,我相信很多Java开发人员沉溺在编码的乐趣中,还没注意到相关消息。 在2017年9月份,Oracle官网发布了一则博客https://blogs.oracle.com/java... 总结来说,主要内容涉及到: 调整JAVA SE的版本发布计划节奏;从JAV...
阅读 1247·2023-01-11 13:20
阅读 1555·2023-01-11 13:20
阅读 1008·2023-01-11 13:20
阅读 1676·2023-01-11 13:20
阅读 3968·2023-01-11 13:20
阅读 2510·2023-01-11 13:20
阅读 1305·2023-01-11 13:20
阅读 3474·2023-01-11 13:20