oracle 补丁打不上_Oracle补丁就该这么打

本文详细介绍了在Oracle RAC环境下,针对19c版本进行补丁更新的完整流程,包括补丁下载、软件备份、OPatch工具使用、冲突检测及解决方案,确保数据库安全和稳定。
摘要由CSDN通过智能技术生成

[补丁集下载]

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的补丁集等。

9a9ddf36ce9469f87ceb064a471e3711.png

下图是基于19c版本今年7月份发布的19.8的补丁集。DatabaseUpdate只包含db补丁包,GIUpdate则既包含GI的补丁包也包含db的补丁包,具体的可以按需来进行下载。

83f7e815da178cc524e0dce77d7bfd21.png

[关于备份]

软件的备份:备份重于一切,这是我们做变更的基础,一定要给自己留后路。在做补丁更新前,我们必须需对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/opatchlsinventory >> home/grid/grid_patch.txt

$ORACLE_HOME/OPatch/opatchlsinv -detail -oh $ORACLE_HOME >> home/grid/grid_patch.txt

$ORACLE_HOME/OPatch/opatchlspatches >> home/grid/grid_patch.txt

lsnrctl status >>/home/grid/crs.txt

>>>>使用oracle用户检查当前oracle的补丁情况

su - oracle

$ORACLE_HOME/OPatch/opatchlsinventory > home/oracle/oracle_patch.txt

$ORACLE_HOME/OPatch/opatchlsinv -detail -oh $ORACLE_HOME >>/home/oracle/oracle_patch.txt

$ORACLE_HOME/OPatch/opatchlspatches >> home/oracle/oracle_patch.txt

>>>>使用oracle用户,在其中一个节点登录到所有实例当中进行查询,记录补丁、无效对象相关信息

sqlplus as sysdba

spool/home/oracle/db0813.txt

set lines 200 pages2000;

show parameter name;

col comp_id for a20;

col version for a20;

col status for a30;

selectcomp_id,version,status from dba_registry;

selectowner,object_type,object_name from dba_objects wherestatus<>'VALID';

selectpatch_id,patch_uid,status,action_time from dba_registry_sqlpatch;

spool off

[关于OPtach工具]

主要调用该工具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]

该文件为补丁说明书,必读项。可以在下载补丁包或者在下载页面的ReadMe的按钮(如下图)里找到。

52a9466e59f13948b503c5ffcbc49223.png

下面提取今年7月份发布的19.8的GI补丁集的readme中的关键主题来分析下:

ADG是否可以先更打

readme中会有明确的字眼提示adg是否可以先更打,如下图:

a3c5c54aa680113e832029d506613f6f.png

f32f4883c574df039019cc1e7cf2df04.png

补丁集信息

下图中有4个patchnumber,其中GI_HOME都要更打,DB_HOME只要更打2个。从这里大致应该就能估算出打GI补丁的时间要比DB补丁多一半,可以估算出要停机的时间。

34aa9483f002474a8bc1bfcad343d181.png

OPatch 工具信息

Readme中会有明确的字眼要求OPatch的最低版本,如下图:

285eae52d46ad07dbe2f98d8036461d3.png

参考该文章来下载需要的opatch工具:MasterNote For OPatch (Doc ID 293369.1)

补丁冲突检测

Readme中给出具体命令,如下图,我们补全拿到环境中执行就行。

baebbe136286ed9158e5965c77bb2e2f.png

我们主要关注跑出来的结果,如果提示成功没报错,那这一环节就可以不做处理。如果有报错,那就需要提前准备解决方案,比如下面这个示例:

f4cf034be9be3715e44fa8df38656c74.png

注:运行该命令对现有环境不影响,需要提前执行,以便有报错提前准备解决方案,避免和维护窗口时间冲突。

空间检测

提前检查空间是否足够,如下图,我们补全拿到环境中执行就行。

8b395d309bd097d08d952c2ad6a6ff20.png

冲突检查解决方案

这里的冲突可以是小补丁和小补丁之间的冲突,也可以是小补丁和补丁集之间的冲突。有2个解决思路,一个是提SR申请冲突小补丁的merge补丁,这个等待时间可能比较久。另外一个思路,就是更打较新的补丁集,一般最新发布的补丁集都会包含之前小补丁,那这块就需要拿补丁集去确认了。

小补丁和补丁集之间的冲突:这块处理起来比较方便,比如说当前安装的是4月份补丁集,我们现在要更打到7月份的补丁集。那现在可以将4月份补丁集上的小补丁先回滚掉,待7月份的补丁集更打完成后,再更打基于7月份补丁集的这个小补丁。

Opatchauto

使用opatchauto命令去更打补丁,一般GI和DB都分开更打。可以根据readme中提供命令进行补全(如下图),整合出适合自己环境的命令。

aab91859a2c8bf5564fcde66afa4afa3.png

以下给出命令示例:>>>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/opatchautoapply u01/software/patch2020/31305339  -oh/u01/app/oracle/product/19.0.3/dbhome_1

Loading Modified SQL Files into the Database

关于数据字典更新操作,根据补丁的readme中提供的命令补全即可:

下图是补丁集更打后的操作:

37162f3ddfc3aab9595bf2dc3bc5a02a.png

下图是OJVM补丁更打后的操作:

ea89aaccbc2b95135078a3dce1a92594.png

以下命令是补丁集+OJVM的数据字典更新(也是说只跑一次datapatch)的示例(adg端不跑),更参考:####Loading ModifiedSQL Files Into the Database

sqlplus /nolog

SQL> CONNECT / ASSYSDBA

SQL> STARTUPnomount

SQL> alter systemset cluster_database=false scope=spfile;

SQL> shutdownimmediate

sqlplus /nolog

SQL> CONNECT / ASSYSDBA

SQL> STARTUPUPGRADE

SQL> exit

$ cd$ORACLE_HOME/OPatch

$ ./datapatch-verbose

sqlplus /nolog

SQL> CONNECT / ASSYSDBA

SQL> alter systemset cluster_database=true scope=spfile;

SQL> SHUTDOWNimmedite

$srvctl start database -db xxx

[关于troubleshotting]

其实做好前期准备工作,基本是成功的几率就很高了,如果还有报错,可能就是遇到bug或者其他问题了。那就只能临时去找解决方案了,如果最终拖的时间比较长,维护窗口时间有限,最后也就只能回退了。分享2个简单报错示例:下图是一个进程占用报错的示例,可以通过fuser命令来确认占用进程,kill掉就行:

b7d5f010d8290a7d581b472a637e2405.png

下图是一个节点间互信问题的报错示例:

0476d758bfc535d5bfd26660271c18a7.png

[总结]

做好打补丁前准备工作,工作量就已完成了大半。这里粗略做以下总结:备份重于一切,一定要对软件进行备份。

集群间通信检查,确认命令为:crsctlcheck cluster -all

grid、oracle节点间互信检查

补丁包权限检查、opatch版本检查、补丁冲突检查

临时问题解决要依托第一案场“证据”顺藤摸瓜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值