Oracle Patch补丁体系和如何打补丁

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Oracle Patch补丁体系和如何打补丁

Oracle作为大型商用关系型数据库,从其补丁体系就可以看出其考虑的全面性。首先我们看下Oracle Patch的主要类型[参考1和2]:

Version/维护版本 
针对前一个维护版本的所有补丁进行整理,增加新的功能或对软件有较大的改动,进行整体测试,得到一个软件版本”包”,称为版本Version。比如 11.2。

One-off patches (e.g. a bug fix) 
One-off patches也称之为一次性补丁,通常针对特定的版本数据库或运行平台。此类补丁通常较小,使用的最为频繁。One-off patch只需要用Opatch工具apply即可,不需要升级/修正数据字典。如在数据库使用过程中出现某些异常后如较常见的ORA-00600、ORA-07445错误等可以通过一次性补丁来搞定。

Critical Patch Update (CPU) 
简称CPU,一般来说CPU包含了Oracle产品安全漏洞的修复补丁集(set of security bug fix),通常一年发布四期,一般是每季度提供一次的一组高优先级修复程序(往往针对安全性问题),对于以前的安全性修复程序而言,这些CPU是累积的,只需要安装最近最后一个就可以,它就包含了之前的所有CPU补丁,但也可包含其他修复程序,目的是解决与非安全性补丁之间的补丁冲突问题(即降低合并请求的必要性)。该类patch的安装和安装one-off patch一样,同样使用”opatch apply”命令来完成。安装完成后应针对既有的数据库(已经创建在使用的数据库),应在数据库级别运行数据字典升级脚本。

Bundled patches (For Windows and Exadata only) 
用于解决在Windows平台无法利用替换共享库文件后relink的方式来更新Oracle binary,所以Oracle特别针对Windows发布区别于Unix上Normal/Molecular CPU的CPU Bundle patch。通常情况下,Bundle Patch会别较大,Windows bundle patches通常每一个季度都会发布。

PSR(Patch Set Release)/Patch Set Update(PSU) 
PSR就是大家常见的大补丁合集,通常1GB左右,也就是oracle版布号的第四位即为PSR号。也就是说oracle版布号的第四位会被修改。每一个PSR是都整合了之前的一些bug,并且经过了严格的测试,通常更新PSR风险相对较小。10.2,10.2.0.1.0是基础发行版,至今已有五个PSR发布,最新10.2的PSR为10.2.0.5.0。 
PSU就是在每个PSR发布之间的补丁,由于新旧PSR之间周期较长,而数据库在运行期间难以保证不会出现新的bug,因此有了PSU。PSU是对于PSR的一个重要补充,每个PSU修改5位版本号的第5位。如,11.1版本升级为11.1.0.7.1;10.2版本为10.2.0.4.2。PSU包含CPU,所以建议尽量安装PSU,PSU通常也是增量的,大部分PSU可以直接安装,但有些PSU则必须要求安装了上一 个版本的PSU之后才能继续安装,要仔细看各个PSU的Readme文档。PSU与CPU一样,定期发布,计划一年发布四次,发布日期与CPU发布日期相同。PSU同样使用Opatch工具安装/删除,命令仍是apply和rollback。一个PSU可视作一个个别补丁,安装和删除操作同样简便。 

[参考3]PSU有三个优势,

(1) 低风险高价值,PSU包括:

  • Critical technical issues with fixes that may affect a large number of customers and that are already proven in the field

  • Critical Patch Update fixes

PSU不包括:

  • Changes that require re-certification (for example, Database fixes that cause optimizer plan changes)

  • Fixes that require configuration changes

每个PSU会限制包含bug fix的数量,一般在25到100个之间。会从用户下载量最多,以及发布的关键安全事件中选择出这些补丁。数据库PSU确保可以支持滚动RAC安装。

(2) PSU会通过严格的测试,保证各种fix可以正常运行,不会互相影响。

(3) Oracle版本号的第五位是作为每个PSU的增量版本号。例如初始PSU版本号是11.1.0.7.1,第二个针对11.1.0.7的PSU版本号就是11.1.0.7.2。

实验: 
1.测试安装如下PSU, 
Bug 24006111 - 11.2.0.4.161018 (Oct 2016) Database Patch Set Update (DB PSU) (文档 ID 24006111.8) 
Oracle Patch补丁体系和如何打补丁

选择操作系统版本进行下载,进入目录中执行opatch apply,
Oracle Patch补丁体系和如何打补丁

提示patch安装需要OPatch的版本是11.2.0.3.5,使用OPatch version查看当前版本是11.2.0.3.4,所以第一步需要升级OPatch。
[oracle@emrep11 ~]$ /u01/app/oracle/11.2.0.4/dbhome_1/OPatch/opatch version
OPatch Version: 11.2.0.3.4
OPatch succeeded.
2.升级OPatch, 
如下选择对应操作系统版本,下载OPatch,p17836989_112000_Linux-x86-64.zip, 
补丁程序17836989: OPatch patch of version 11.2.0.3.5 for Oracle software releases 11.2.0.x (NOV 2013) 
Oracle Patch补丁体系和如何打补丁

解压缩,并复制至$ORACLE_HOME下,可以提前备份下旧版的OPatch。再执行OPatch version,
[oracle@emrep11 ~]$ /u01/app/oracle/11.2.0.4/dbhome_1/OPatch/opatch version
OPatch Version: 11.2.0.3.6
OPatch succeeded.
升级至11.2.0.3.6。
3.继续安装,
Oracle Patch补丁体系和如何打补丁
执行失败,从错误信息看,有下面三个可执行程序处于激活状态,
Following executables are active :
/u01/app/oracle/11.2.0.4/dbhome_1/bin/oracle
/u01/app/oracle/11.2.0.4/dbhome_1/lib/libclntsh.so.11.1
/u01/app/oracle/11.2.0.4/dbhome_1/lib/libsqlplus.so
需要停止这些激活的可执行程序,首先查找sqlplus,
Oracle Patch补丁体系和如何打补丁
接下来需要关闭数据库,以确保libclntsh.so.11.1停止,
Oracle Patch补丁体系和如何打补丁
仍旧不行,说明仍有进程使用,尝试关闭监听,可参考这篇文章:《opatch error code 73: Prerequisite check “CheckActiveFilesAndExecutables” failed. (文档 ID 1942237.1)》
Oracle Patch补丁体系和如何打补丁
此时再次执行opatch apply,
Oracle Patch补丁体系和如何打补丁
Oracle Patch补丁体系和如何打补丁
4.验证安装,
Oracle Patch补丁体系和如何打补丁
Oracle Patch补丁体系和如何打补丁
Oracle Patch补丁体系和如何打补丁
Oracle Patch补丁体系和如何打补丁
可以看出已安装了相应的patch。

总结: 

1.要了解Oracle Patch补丁体系中,各种类型补丁的关系、适用范围,这样才能在需要打补丁的时候选择正确的补丁并完成安装步骤了。 
2.某些补丁要求最低的OPatch版本,OPatch的升级仅需要下载对应操作系统版本的OPatch压缩包,直接解压缩至$ORACLE_HOME即可,以防万一可以备份之前的OPatch。 
3.OPatch有一系列的命令参数,可以查看帮助继续了解,例如有些补丁可以不用停机,在线打使用online参数。

参考文章: 
参考1: 
http://blog.csdn.net/wenzhongyan/article/details/16858683 
参考2: 
http://blog.csdn.net/haiross/article/details/18620413 
参考3: 
Patch Set Updates for Oracle Products (文档 ID 854428.1) 
参考4: 
opatch error code 73: Prerequisite check “CheckActiveFilesAndExecutables” failed. (文档 ID 1942237.1) 
参考5: 
Quick Reference to Patch Numbers for Database PSU, SPU(CPU), Bundle Patches and Patchsets (文档 ID 1454618.1)

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Oracle Patch补丁体系和如何打补丁


 上一篇
新增非空约束字段在不同版本中的演进 新增非空约束字段在不同版本中的演进
开发提了一个数据库变更需求,新增一字段,没有NOT NULL非空约束,但有默认值为NULL。看起来有些奇怪,因为若字段允许NULL,其默认值就是NULL,不用显示声明,可以创建一个无DEFAULT NULL的新增字段再查看desc表结构,就
下一篇 
MySQL数据库入门——多实例配置 MySQL数据库入门——多实例配置
MySQL数据库入门——多实例配置 前面介绍了相关的基础命令操作,所有的操作都是基于单实例的,mysql多实例在实际生产环境也是非常实用的,因为必须要掌握 1、什么是多实例    多实例就是一台服务器上开启多个不同的