成熟的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. python文件

    目录 1. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 2. 文件的基本操作 2.1 操作文件的套路 2.2 操作文件的函数/方法 2.3 read 方法 -- 读取文件 2.4 打 ...

  2. 博弈之——SG模板

    很久没搞博弈了.先来写个模板: 现在我们来研究一个看上去似乎更为一般的游戏:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负.事实上,这个游戏可以 ...

  3. 初识 Java-监听器

    使用Listener类当java  web应用程序在web容器中运行时,在java web应用程序内部会不断发生各种事件,例如web应用的启动,暂停,销毁等.以及web应用中session开始和结束 ...

  4. SPOJ7258 SUBLEX - Lexicographical Substring Search(后缀自动机)

    Little Daniel loves to play with strings! He always finds different ways to have fun with strings! K ...

  5. View的getMeasuredWidth和getWidth有什么区别?

    getMeasuredWidth 为view的测量宽度. getWidth为view的最终宽度. (这里只讨论宽度,高度也是一样的道理) 那么它们之间有什么区别呢? 测量宽度是在view的measur ...

  6. 在 Centos 安装 MySQL

    MySQL是开源的数据库管理系统,通常作为LEMP(Linux, Nginx, MySQL/MariaDB, PHP/Python/Perl)技术栈的一部分,而被安装.RedHat 会害怕 Oracl ...

  7. 爬虫入门实例:利用requests库爬取笔趣小说网

    w3cschool上的来练练手,爬取笔趣看小说http://www.biqukan.com/, 爬取<凡人修仙传仙界篇>的所有章节 1.利用requests访问目标网址,使用了get方法 ...

  8. 记一次 MySQL semaphore crash 的分析(爱可生)

    文章来源:爱可生云数据库作者:洪斌 DBA应该对InnoDB: Semaphore wait has lasted > 600 seconds. We intentionally crash t ...

  9. VS2017 + QT5 + C++开发环境搭建和计算器Demo测试

     非常有帮助的参考资料: https://blog.csdn.net/gaojixu/article/details/82185694 该参考文献的主要流程: (1)QT下载安装:从官网下载QT,并记 ...

  10. PHP下载网页

    <?php /*   author:whq   作用:获取网页的内容 */   include "../Snoopy/Snoopy.class.php";class Cute ...