关于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,这个直接不需要关闭实例就可以打,详情可以翻阅我之前的博文:

Oracle 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种方式。

  1. 补丁包里边有个online文件夹的就是。
  2. readme里边有教你online打补丁的方式。
  3. 在目录<patchid>/etc/config/inventory.xml。打开inventory文件,查找 <online_rac_installable>,如果为true,则支持online patch。
  4. 通过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

 

posted @ 2020-08-11 23:34  PiscesCanon  阅读(362)  评论(0编辑  收藏  举报