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补丁体系和如何打补丁


4.验证安装,

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

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

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

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


可以看出已安装了相应的patch。

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

相关推荐