成熟的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. with与上下文管理器

    如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 "with" 关键字的语句,它通常用在什么场景呢? 对于系统资源如文件.数据库连接.socket 而言,应用程序打开这 ...

  2. JS基础(三)构造函数

    JS中的构造函数 <script language="JavaScript"> window.onload = function(){ function Bottle( ...

  3. 大家好,又是新的一天。今天给大家带来一些新的知识:选择器的种类和css的三种样式

    今天我们为大家 选择了 六种 选择器: 1. 标签选择器 2.id选择器 3.class选择器 4.后代选择器 5.子代选择器 6.交集选择器 我们就举三个典型的例子:后代选择器,子代选择器和交集选择 ...

  4. Mybatis框架基础支持层——解析器模块(2)

    解析器模块,核心类XPathParser /** * 封装了用于xml解析的类XPath.Document和EntityResolver */ public class XPathParser { / ...

  5. jQuery: 选择器,筛选器

    jQuery 简介 jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototype之后又一个优秀的Javas ...

  6. 19 个常用的 JavaScript 简写方法

    来自:SangSir 链接:https://segmentfault.com/a/1190000012673854 原文:https://www.sitepoint.com/shorthand-jav ...

  7. 学习之路-前端-笔记-一、HTML笔记

    各种技巧 1.在Webstrom中 同时按ctrl+alt+insert创建新内容 2.输入标签按tab自动补全 按end 或 HOME实现光标移动到当前行的最后或最前 3.按住alt键不放同时按鼠标 ...

  8. Python对象相关内置函数

    针对一个对象,通过以下几个函数,可以获取到该对象的一些信息. 1.type() ,返回某个值的类型 >>> type() <class 'int'> >>&g ...

  9. Android为TV端助力 转载:内存泄露与内存溢出的区别

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. ...

  10. 利用ChromeCROSS可以在chrome浏览器上调试跨域代码

    利用ChromeCROSS可以在chrome浏览器上调试跨域代码 1.下载ChromeCROSS文件,可百度下载,或者在我的百度云上下载:链接: https://pan.baidu.com/s/10_ ...