资讯专栏INFORMATION COLUMN

RAC补丁日常更新成功反遇异常处理

IT那活儿 / 3317人阅读
RAC补丁日常更新成功反遇异常处理

点击上方“IT那活儿”,关注后了解更多精彩内容!!!




现象描述


最近在搭建4套双RAC准备测试ADG时,所有RAC应用完最新补丁后,使用“crsctl query crs softwarepatch”命令核查grid的补丁号,发现其中一套RAC的两个节点的结果不一样。

节点1: 
Oracle Clusterware patch level on node node21 is [92621972]
节点2: 
Oracle Clusterware patch level on node node22 is [1237854203]
通常遇到这种问题时,通常会有以下几种原因:
  1. 各节点补丁更新不一致;
  2. 补丁更新时未替换opatch;
  3. 补丁未在所有节点上应用;
  4. OCR保存了未更新的补丁详细信息。
上述几种现象比较好处理,第1种~第3种现象,重新应用补丁,保持两个节点的补丁一致即可解决,第4种现象再次执行一次rootcrs.sh -prepatch和rootcrs.sh -postpatch也能处理。



跟踪排查



上面的几种解决方案都试了一遍,再次检查使用“crsctl query crs softwarepatch”命令核查grid的补丁号,仍然是如下结果:
节点1: 
Oracle Clusterware patch level on node node21 is [92621972]
节点2: 
Oracle Clusterware patch level on node node22 is [1237854203]
那就用kfod再检查下ASM里记录的patch详细信息。
节点1的输出结果:

</>复制代码

  1. [root@node21 ~]# /u01/app/19.3.0/grid/bin/kfod op=patches
    ---------------
    List of Patches
    ===============
    29401763
    29517247
    29585399
    32585572
    33192793
    33208107
    33208123
    33239955
    [root@node21 ~]# /u01/app/19.3.0/grid/bin/kfod op=PATCHLVL
    ---------------
    Current Patch level
    ===================
    92621972
节点2的输出结果:

</>复制代码

  1. [root@node22 ~]# /u01/app/19.3.0/grid/bin/kfod op=patches
    ---------------
    List of Patches
    ===============
    29401763
    29517242
    29517247
    29585399
    32585572
    33192793
    33208107
    33208123
    33239955
    [root@node22 ~]# /u01/app/19.3.0/grid/bin/kfod op=PATCHLVL
    ---------------
    Current Patch level
    ===================
    1237854203


对比发现,原来节点2的ASM里记录的opatch信息多了一条记录:29517242,导致的两个节点的GI补丁号不一致。





解决方案



既然知道是多了一条记录,那就删了它吧!

step1 在节点2上执行打补丁应用脚本。
Root用户:
/u01/app/19.3.0/grid/crs/install/rootcrs.sh -prepatch
step2 使用kfod命令删除多的那一条patch信息。
Grid用户:
/u01/app/19.3.0/grid/bin/patchgencommit -rb 29517242
命令执行结果如下:

</>复制代码

  1. 19
    loading the appropriate library for linux
    patchgensh19.so loaded succesfully.

    Note: Successfully commited, created .s file with apply and recover patches
    mv -f /u01/app/19.3.0/grid/lib/libasmclntsh19.so /u01/app/19.3.0/grid/lib/libasmclntsh19.so.bak
    /usr/bin/as /u01/app/19.3.0/grid/rdbms/lib/skgfpmi.s -o /u01/app/19.3.0/grid/rdbms/lib/skgfpmi.o
    /usr/bin/ar r /u01/app/19.3.0/grid/lib/libasmclnt19.a /u01/app/19.3.0/grid/rdbms/lib/skgfpmi.o
    /usr/bin/ar r /u01/app/19.3.0/grid/lib/libasmclntsh19.a /u01/app/19.3.0/grid/rdbms/lib/skgfpmi.o
    rm -f /u01/app/19.3.0/grid/rdbms/lib/skgfpmi.o
    rm -f /u01/app/19.3.0/grid/rdbms/lib/skgfpmi.s
    make /u01/app/19.3.0/grid/lib/libasmclntsh19.so -f /u01/app/19.3.0/grid/rdbms/lib/ins_rdbms.mk
    make[1]: Entering directory `/home/grid
    rm -f /u01/app/19.3.0/grid/lib/libasmclntsh19.so
    /u01/app/19.3.0/grid/bin/linkshlib /u01/app/19.3.0/grid/lib/libasmclntsh19.so /u01/app/19.3.0/grid/rdbms/lib/ins_rdbms.mk so ld_shlib LIBS
    + PATH=/bin:/usr/bin:/usr/ccs/bin
    + export PATH
    + lib=/u01/app/19.3.0/grid/lib/libasmclntsh19.so
    + makefile=/u01/app/19.3.0/grid/rdbms/lib/ins_rdbms.mk
    + so_ext=so
    + target=ld_shlib
    ++ basename /u01/app/19.3.0/grid/lib/libasmclntsh19.so .so
    + libname=libasmclntsh19
    ++ dirname /u01/app/19.3.0/grid/lib/libasmclntsh19.so
    + sodir=/u01/app/19.3.0/grid/lib
    + ardir=/u01/app/19.3.0/grid/lib/
    +
    [ var = ld_shlib ]
    + suffix=LIBS
    + var=
    +
    [ ! -f /u01/app/19.3.0/grid/lib/libasmclntsh19.a ]
    +
    [ != ]
    + make -f /u01/app/19.3.0/grid/rdbms/lib/ins_rdbms.mk ld_shlib _FULL_LIBNAME=/u01/app/19.3.0/grid/lib/libasmclntsh19.so _LIBNAME=libasmclntsh19 _LIBDIR=/u01/app/19.3.0/grid/lib/
    _LIBNAME_LIBS=$(libasmcl
    ntsh19LIBS) _LIBNAME_EXTRALIBS=$(libasmclntsh19EXTRALIBS)make[2]: Entering directory `/home/grid
    /u01/app/19.3.0/grid/bin/orald -o /u01/app/19.3.0/grid/lib/libasmclntsh19.so -shared -z noexecstack -Wl,--disable-new-dtags -L/tmp/bootstraplib/ -L/u01/app/19.3.0/grid/lib/ -L/u01/app/19.3.0/grid/rdbms/l
    ib/ -L/u01/app/19.3.0/grid/lib/stubs/ -Wl,--version-script=/u01/app/19.3.0/grid/rdbms/admin/libasmclntsh19.def -Wl,--whole-archive /u01/app/19.3.0/grid/lib/libasmclntsh19.a -Wl,--no-whole-archive `cat /u01/app/19.3.0/grid/lib/sysliblist` -Wl,-rpath,/u01/app/19.3.0/grid/lib -lm `cat /u01/app/19.3.0/grid/lib/sysliblist` -ldl -lm -L/u01/app/19.3.0/grid/lib -lircmake[2]: Leaving directory `/home/grid

    make[1]: Leaving directory `/home/grid
    make libasmclntsh19.so returned code 0


step3 在节点2执行补丁应用脚本。

Root用户:

</>复制代码

  1. /u01/app/19.3.0/grid/rdbms/install/rootadd_rdbms.sh
    /u01/app/19.3.0/grid/crs/install/rootcrs.sh -postpatch
step4 再次使用“crsctl query crs softwarepatch”命令核查grid的补丁号,这次结果一致了。
节点1:
Oracle Clusterware patch level on node node21 is [92621972]
节点2:
Oracle Clusterware patch level on node node22 is [92621972]
完美解决,Perfect!



END



更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129739.html

相关文章

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<