共计 3714 个字符,预计需要花费 10 分钟才能阅读完成。
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)
选择操作系统版本进行下载,进入目录中执行 opatch apply,
提示 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_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. 继续安装,
执行失败,从错误信息看,有下面三个可执行程序处于激活状态,
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,
接下来需要关闭数据库,以确保 libclntsh.so.11.1 停止,
仍旧不行,说明仍有进程使用,尝试关闭监听,可参考这篇文章:《opatch error code 73: Prerequisite check“CheckActiveFilesAndExecutables”failed. (文档 ID 1942237.1)》
此时再次执行 opatch apply,
4. 验证安装,
可以看出已安装了相应的 patch。
总结:
1. 要了解 Oracle Patch 补丁体系中,各种类型补丁的关系、适用范围,这样才能在需要打补丁的时候选择正确的补丁并完成安装步骤了。
2. 某些补丁要求最低的 OPatch 版本,OPatch 的升级仅需要下载对应操作系统版本的 OPatch 压缩包,直接解压缩至 $ORACLE_HOME 即可,以防万一可以备份之前的 OPatch。
3.OPatch 有一系列的命令参数,可以查看帮助继续了解,例如有些补丁可以不用停机,在线打使用 online 参数。
参考文章:
参考 1:http://www.linuxidc.com/Linux/2016-11/137673.htm
参考 2:http://www.linuxidc.com/Linux/2016-11/137680.htm
参考 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)
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-11/137681.htm