成熟的IT企业,往往会有自己的补丁计划。如一年打几次补丁,打哪一个补丁。

在补丁之前,需要进行补丁分析,一份比较完善补丁分析,往往能帮助企业未雨绸缪,提前将可能引发的问题先解决掉,保证生产的稳定和安全。

在这里,我和大家分享一下,如何做一份比较完善补丁分析。这可能是一篇方法论的文章,但常言道,说起来容易做起来难。虽然我能告诉了你方法论,但是在实际操作的过程中,我相信你更愿意花钱买服务。因为要阅读大量的文档,查询各种关键字,分析各种触发条件,才能做出一份比较完善的补丁分析。一次补丁分析,耗时1~2周,看几百篇文档是经常的事情。

High Level Step:
初级要求:
(1)选Release
(2)选Patch Set
(3)选PSU
高级要求:
(4)查Patch Set的known issue
(5)查PSU的recommended patch
(6)查影响性能和wrong result的补丁
(7)查影响SPM的bug
(8)查高风险的Patch
(9)查特殊平台的Patch
(10)结合历史SR查询
(11)结合别的客户SR
(12)冲突分析

(1)选Release,Doc ID 742060.1
当然了,首先你得选一般版本,是11g还是12c,是11gR1还是11gR2。你需要Release Schedule of Current Database Releases (Doc ID 742060.1)这个文档。你得去看每个release的发布时间,Patching end date,以便于你更好的获得Oracle的支持。我是指研发的支持。因为过了标准服务期,在没有买延伸服务期的情况下,你要让研发出一个补丁几乎是不可能的事情。当然,额外的情况也有,比如加入PUMA program(Proactive Upgrade and Migration Assistance),这有可能获得额外的支持。 btw说一下,PUMA开发出来的补丁,一定要用最新的opatch工具打,别用$ORACLE_HOME下原生的那个。

(2)选Patch Set,Doc ID 1454618.1
说到补丁分析,你首先会想到的肯定是这个文档:Quick Reference to Patch Numbers for Database PSU, SPU(CPU), Bundle Patches and Patchsets (Doc ID 1454618.1) 。这个文档标识了从8.1.7.4到最新的12.1.0.2的所有补丁号,包括Patch set号,PSU号,GI PSU号,SPU号,Bundle Patch号,OJVM Patch号。很多时候,客户问我,我要打11.2.0.4.5的PSU,这个补丁号是多少,我往往会推荐这个文档。

但是需要注意到是,作为补丁分析的入口,这个文档是for一般DB的,不是Exadata的。这里,以及后面的讨论我们都以一般DB为例,先不提Exadata。如果是Exadata的补丁,那是另外的一套体系,请参考Exadata Database Machine and Exadata Storage Server Supported Versions (Doc ID 888828.1)

(3)选PSU,Doc ID 756671.1
当你选好了Patch Set,你肯定想知道,基于这个patch set,我应该打哪个PSU?这里有一篇文档可以指导你:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)。这个文档里面,不仅有PSU,还有OJVM的推荐补丁,还有一些Miscellaneous Fixes的补丁(如AIX下的),还有些EBS的补丁。

这里提一下PSU和SPU的选择,这其实是打Patch的两条路,一旦选择一条路,就不能同时走另外一条路了,也就是说,一旦我选择打PSU,我不能在PSU的基础上再打SPU,或者我一旦选择了打SPU,我不能在SPU的基础上再打PSU。

而SPU主要是安全性方面的补丁,PSU不仅包含安全性方面的内容,还包括功能性方面的修补,且又不是大功能的改变(如12.1.0.1这个patch set还没有in memory option,到12.1.0.2这个patch set才有in memory option这个功能)。对于客户来说,打PSU是low risk,high value的选择。

到了这里,一般的客户的补丁分析,就算结束了。打上了Patch set,打了PSU或SPU,就算完成任务了。但是对于高级的客户,这才是刚刚搭好了一个框架。

(4)查Patch Set的known issue,如Doc ID 1683799.1
从这里开始,就没有一篇汇总的文章让你看了,你要各个Patch set找对应的Known issue的文章。如12.1.0.2 Patch Set - Availability and Known Issues (Doc ID 1683799.1),如11.2.0.4 Patch Set - Availability and Known Issues (Doc ID 1562139.1)等等。

在这个文档中,你可以看到当前你选择的那个Patch Set的known issue,包括General Alerts / Issues的,包括Issues introduced的,你要一个一个bug去核对,bug的文档,我们叫做“点八文档”,因为bug的文档命名往往是以.8结尾,如Bug 20881450 -Doc ID 20881450.8,如Bug 20144308 Doc ID 20144308.8。随着时间的推移,Patch Set的known issue的列表会越来越长,你要核对的bug也越来越多。这就是耗费体力的地方。

我们要核对在这个Patchset上的所有known issue的bug是否在当前的PSU已经修复,是否是发生在特定的平台,是否已经有Patch了还是只是Tracking Bug Patch,是否下载次数很低,Linux下载了几次,Solaris下载了几次,AIX下载了几次,HP IA下载了几次,如果下载次数低,是否考虑将该bug的patch排除在外(因为后面涉及到一个补丁冲突的问题,越多的one-off patch,就越容易发生冲突的可能。)

而且,你还是只是你第一次做该Patchset 上的PSU的分析,如果你做下一次PSU,你还要考虑上述PatchSet的known issue是否在本PSU已经修复,没有修复的话,上次known issue的bug是one-off patch还是merge patch,如果是merge patch,在本PSU中不可用,那么就只能再申请本PSU的merge patch了。这也是你经常看到Merge Patch xxxx on top of 11.x.x.x.x 这样的request。这也是我在上面说的,如果下载次数低,说明遇到的可能性不大,可以选择不打这个patch。

(5)查PSU的recommended patch,如Doc ID 2076280.1
Patch Set会引入问题,PSU同样也会引入问题。此时,你就要去查一个叫做Oracle Database Patch Set Update 12.1.0.2.160119 Known Issues (Doc ID 2076280.1)的文档,在这个文档里面,可以看到该PSU的known issue,会有对应的Patch或者workaround。所以打了对应版本的PSU,也需要关注PSU的recommended Patch。

注意,有DB的PSU known issue,自然也有GI的PSU known issue。

一般情况下,刚刚出来的PSU没几天,这个文档上的known issue往往显示为空,因为还没有人上报issue。所以我们会建议客户不打最新的PSU,拖后几个月,看看PSU的known issue上是否有patch,即等该文档完善了PSU的recommended Patch之后再打。

另外还有一种情况,就是PSU已经很靠后面了,如10.2.0.5.18,已经到了PSU18,问题都修复的差不多了,即使等待PSU出来好久,也看不到known issue了。

(6)查影响性能和wrong result的补丁,如Doc ID 2034610.1
关键字:Poor Performance or Wrong Results ,此时你会发现一篇文档:Things to Consider to Avoid Poor Performance or Wrong Results on 12.1.0.2 (Doc ID 2034610.1),恩,这里面的补丁也很重要,需要打上。

注意,这个文档上可能会分不同的OS平台,如AIX平台,需要区分平台打上。另外,这个文档上不仅仅有bug的patch,可能还会说明一些需要设置的setting,这个在安装的时候,也建议根据文章来设置。

(7)查影响SPM的bug,如Doc ID 2035898.1
SPM也可性能密切相关,关键字:Avoid Problems with SQL Plan Management。你会找到Patches to Consider for 12.1.0.2 to Avoid Problems with SQL Plan Management (SPM) (Doc ID 2035898.1)。

(8)查高风险的Patch,如Doc ID 1914998.1
在MOS的Patches & Updates菜单,有一个Advanced搜索,选好版本和平台,增加description为“Crash”,“leak”,“spin”,“hang”你会进一步得到很多高危的bug,如Process Spins and/or ASM and DB Crash if RAC Instance Is Up For > 248 Days (Doc ID 1914998.1)

(9)查特殊平台的Patch,如Doc ID 2022559.1
有些问题,只是发生在某些特定的操作系统下,需要结合操作系统平台的关键字,进行查找。如你可以找到Recommended Bundle for AIX 12.1.0.2. with critical fixes (Doc ID 2022559.1)

(10)结合历史SR查询
结合之前遇到的问题,开过的SR,是否已经有给了Patch,这个Patch在当前版本的PSU中是否包含,是否已经被当前PSU修复,如果是,那么就采用该PSU,如果仍然没有修复,由于是本企业已知问题,需要慎重对待,需要查是否在本PSU上有one-off,如果有冲突,需要申请merge patch。

(11)结合别的客户SR
最后,如果你购买了原厂服务,原厂的工程师是可以看到别的客户的SR的,也就能查到下面的一个文档:Documented Database Bugs With High "Solved SR" Count (Doc ID 2099231.1 INTERNAL)。这个文档上记录了Prob为四级,即超过50个SR遇到了这个bug的问题。所以,还可以结合其他客户遇到的bug,遇到的问题,来提前帮你预防这些bug。

最后,当你查阅了那么多文档,做出了一份比较完善的补丁分析,这还不是终点。还需要将这些补丁进行冲突分析。目前就客户自己而言,已经可以MOS补丁冲突检测工具https://support.oracle.com/epmos/faces/PatchConflictCheck 来进行检测。而原厂工程师,可以用ARU工具http://aru.us.oracle.com:8080/ARU/ConflictCheck/get_form来进行检测。

检测完毕后,就要看哪些冲突,如何解决,是否有替换补丁,是否需要申请merge patch等等。

怎么样,看到这里,你应该相信我之前说的补丁分析是个体力活吧。但是正是因为如此细致缜密的工作,才体现出其工作的价值。

提前做好了预防,保证日常运行的稳定与安全。这就是DBA的价值。

转://Oracle打补丁方法论的更多相关文章

  1. oracle打补丁

    oracle 数据库补丁安装(单实例) ------------24006111 注:务必先安装24006111再安装24315821,否则无法进行正常的补丁安装流程.1.关闭数据库监听和数据库实例 ...

  2. 转://Oracle数据库补丁分析实践

    小弟我最近做了几次补丁分析,最开始分析补丁,感觉挺痛苦的,因为补丁数量多,且涉及的知识点非常非常的广,客户的要求又非常高.挺伤不起的.不过随着分析的深入,我慢慢的掌握了一些小方法.也在support网 ...

  3. ORACLE查看补丁出现“OPatch failed with error code 1”

    案例场景:               在Oracle Linux Server release 5.7上安装完ORACLE 10g后,顺便将PSR(Patch Set Release)p681018 ...

  4. Windows下oracle打补丁步骤

    1.Oracle官网下载对应的补丁文件(需要oracle支持账号才能下载) 2.设置ORACLE_HOME set oracle_home=F:\oracle\product\11.2.0\dbhom ...

  5. Oracle 12C 补丁升级

    升级步骤 Oracle 12.2.0.1升级至12.2.0.1.190115 1.阅读readme文件 2.检查更新opatch 3.备份程序 4.使用opatchauto工具进行数据库升级 5.打O ...

  6. 【ORACLE】oracle打补丁

    -- 备份旧的opatch cd $ORACLE_HOME/ mv OPatch  OPatch_20180323_old -- 上传补丁工具和补丁包到oraclehome目录下,解压 unzip p ...

  7. oracle打补丁步骤简介

    1.了解opatchopatch是用于维护"个别"补丁的,有人称其为interim path或是one-off patch该命令的存放位置在$ORACLE_HOME下的OPatch ...

  8. Oracle安装部署,版本升级,应用补丁快速参考

    一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...

  9. 完整记录一则Oracle 11.2.0.4单实例打PSU补丁的过程

    本文记录了打PSU的全过程,意在体会数据库打PSU补丁的整个过程. 1.OPatch替换为最新版本2.数据库软件应用19121551补丁程序3.数据库应用补丁4.验证PSU补丁是否应用成功 1.OPa ...

随机推荐

  1. 【Java并发编程】23、ConcurrentHashMap原理分析(1.7和1.8版本对比)

    jdk 1.8版本 ConcurrentHashMap在1.8中的实现,相比于1.7的版本基本上全部都变掉了.首先,取消了Segment分段锁的数据结构,取而代之的是数组+链表(红黑树)的结构.而对于 ...

  2. Docker 系列七(Dubbo 微服务部署实践).

    一.前言 之前我们公司部署服务,就是大家都懂的那一套(安装JDK.Tomcat —> 编译好文件或者打war包上传 —> 启动Tomcat),这种部署方式一直持续了很久,带来的问题也很多: ...

  3. Spring的xml解析原理分析【转载】

    一:前言 二:spring的配置文件 三:依赖的第三方库.使用技术.代码布局 四:Document实现 五:获取Element的实现 六:解析Element元素 七:Bean创造器 八:Ioc容器的创 ...

  4. 前端入门5-CSS弹性布局flex

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 声明 本系列文章内容全部梳理自以下四个来源: <HTML5权威指南> <JavaScript权威指南> MD ...

  5. 洛谷P5205 【模板】多项式开根(多项式sqrt)

    题意 题目链接 Sol 这个就很没意思了 求个ln,然后系数除以2,然后exp回去. #include<bits/stdc++.h> #define Pair pair<int, i ...

  6. 2018-08-03 中文代码示例之Python-如何遍历字典

    此系列之后将参考一些最常用功能的在线教程/示例程序, 进行示例代码的中文化改进. 欢迎推荐有代表性和实用性的教程, 篇幅小更佳. 谢谢. 参考Python - How to loop a dictio ...

  7. Dynamics AX 2012 性能优化之 SQL Server 复制

    Dynamics AX 2012 性能优化之 SQL Server 复制 分析数据滞后 在博文 Dynamics AX 2012 在BI分析中建立数据仓库的必要性 里,Reinhard 阐述了在 AX ...

  8. JavaScript面向对象编程指南(三) 函数

    第3章 函数 3.1 什么是函数 函数:本质是一种代码的分组形式.函数的声明如下: <script type="text/javascript"> /*函数的声明组成: ...

  9. android默认开启adb调试方法分析

    用adb调试android时,每次接入usb线,都会提示一个确认打开usb调试功能的窗口,有时候,我们需要默认打开usb调试功能.或者无需弹出对话框,直接默认开启.这个我们需要分析adb的流程了. a ...

  10. mysql数据库的基本操作:创建数据库、查看数据库、修改数据库、删除数据库

    本节相关: 创建数据库 查看数据库 修改数据库 删除数据库 首发时间:2018-02-13 20:47 修改: 2018-04-07:考虑到规范化,将所有语法中“关键字”变成大写;以及因为整理“mys ...