zoukankan      html  css  js  c++  java
  • 关于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

  • 相关阅读:
    php
    php数据排序---array_multisort
    IOS 线程描述
    IOS 进程描述
    IOS 强指针(strong)和弱指针(weak)
    IOS autosizing(设置控件的固定位置大小)
    IOS UIActivityIndicatorView动画
    IOS UIImageView的帧动画
    IOS Block动画
    IOS UIView动画(封装动画)
  • 原文地址:https://www.cnblogs.com/PiscesCanon/p/13488083.html
Copyright © 2011-2022 走看看