关于Oracle小补丁分类的一些看法
关于Oracle小补丁分类的一些看法
小补丁在opatch版本符合的情况下,一般都是通过opatch apply完成对$ORACLE_HOME目录的修补。
之后对已经存在的数据库跑脚本做数据字典升级,这些在补丁自带的readme可以看到。
关于小补丁分类,按照我的理解,以RAC打补丁为基础,
分为普通的patch,此种patch可以通过以下两种方式打上patch
1.需要停用所有实例,然后再能实施打补丁的操作。
2.至少保证,在补丁升级过程中,所有打开的实例的ORACLE_HOME补丁情况需要都相同。
比如3各节点的RAC,node1先shutdown db,listener,然后打补丁。这一时刻,打开的实例的节点为node2和node3,这两个节点的ORACLE_HOME补丁情况都相同(都还没打)。
接下来,关闭node2,然后node2打补丁。这一时刻,打开实例的节点为node3,无需比较。
再继续,关闭node3,这个时候可以打开node1和node2。这一时刻,打开的实例的节点为node1和node2,这两个节点的ORACLE_HOME补丁情况都相同(都打了补丁)。然后给node3打补丁。
最后,打开node3,这一时刻,所有打开的实例的节点的ORACLE_HOME补丁情况都相同(都打了补丁)。然后其中一个节点去跑脚本升级数据字典即可。
然后是online patching,这个直接不需要关闭实例就可以打,详情可以翻阅我之前的博文:
这里不再赘述。
最后是rolling patch,这个可以不要求打开的实例的ORACLE_HOME补丁情况需要都相同,也就是打开实例的服务器ORACLE_HOME可以同时运行在不同版本不同补丁的环境下。
比如3各节点的RAC,node1先shutdown db,listener,然后打补丁。接着就可以打开node1的数据库和监听了。
然后是node2,和node1一样,接着是node3。这种和普通patch的满足条件不同了。
网上的一些说法:
Rolling Patch 有如下特性:
(1)Patch 不影响数据库的内容
(2)Patch 和RAC 内部通信结构无关
(3)Patch 改变程序的逻辑,不修改kernel modules的common header definitions。包括客户端的patch,其只影响一些工具,如export,import,sql*plus和sql*loader等。
如何区分patch种类
先说说online patch,最好区分,有4种方式。
- 补丁包里边有个online文件夹的就是。
- readme里边有教你online打补丁的方式。
- 在目录<patchid>/etc/config/inventory.xml。打开inventory文件,查找 <online_rac_installable>,如果为true,则支持online patch。
- 通过opatch来查看,
[oracle@oracle 18034737]$ opatch query -is_online_patch . Oracle Interim Patch Installer version 11.2.0.3.21 Copyright (c) 2020, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.21 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2020-06-07_05-56-15AM_1.log -------------------------------------------------------------------------------- Patch is an online patch: true OPatch succeeded.
但是如果用all看是有问题的,这估计是一个opatch工具的bug,
[oracle@oracle 18034737]$ opatch query -all . | grep online Patch is an online patch: false
然后是rolling patch,
[oracle@oracle 18034737]$ opatch query -is_rolling_patch . Oracle Interim Patch Installer version 11.2.0.3.21 Copyright (c) 2020, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.21 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2020-06-06_20-30-17PM_1.log -------------------------------------------------------------------------------- Patch is a rolling patch: true Patch is a FMW rolling patch: false OPatch succeeded.
Patch is a rolling patch: true代表这是一个rolling patch。
最后,剩下的就都是普通的patch了。
一般来说,普通的patch是需要关闭数据库监听的,因为opatch apply的时候会报某个文件被占用的。
不过在普通的patch中,我发现有些特例。
比如补丁14202396-REMAP_DATA FAILS IF USED FOR MORE THAN 10 COLS IN A TABLE,
既不是online patch,
[oracle@dev-rac01 14202396]$ ll total 24 drwxr-xr-x 4 oracle oinstall 4096 May 1 2015 etc drwxr-xr-x 4 oracle oinstall 4096 May 1 2015 files -rw-r--r-- 1 oracle oinstall 7449 May 1 2015 postinstall.sql -rw-rw-r-- 1 oracle oinstall 5937 May 1 2015 README.txt [oracle@dev-rac01 14202396]$ opatch query -is_online_patch . Oracle Interim Patch Installer version 11.2.0.3.21 Copyright (c) 2020, Oracle Corporation. All rights reserved. It is not a valid online patch: . OPatch failed with error code 220 [oracle@dev-rac01 14202396]$ more etc/config/inventory.xml | grep online <online_rac_installable>false</online_rac_installable>
也不是rolling patch,
[oracle@dev-rac01 14202396]$ opatch query -is_rolling_patch . Oracle Interim Patch Installer version 11.2.0.3.21 Copyright (c) 2020, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.21 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2020-08-12_10-53-24AM_1.log -------------------------------------------------------------------------------- Patch is a rolling patch: false Patch is a FMW rolling patch: false OPatch succeeded.
但是在<patchid>/etc/config/inventory.xml。打开inventory文件,查找<instance_shutdown>,会发现该值为false,代表不需要关闭实例。
在补丁的readme中,也没有任何步骤提到需要shut down全部的services。
所以我在没有关闭数据库,监听的情况下试了一下,确实可以成功打上补丁。
由于该补丁并不是一个rolling pach,因此,在RAC环境下还是要保证同时打开实例的所有服务器的ORACLE_HOME运行在同一版本上。
所以RAC环境还是要关闭实例打上,当然单实例的话就可以直接打就行了。
readme中也提到,This patch is non-RAC Rolling Installable.
参考文档
https://www.cnblogs.com/tianlesoftware/p/3609070.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?