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

选择操作系统版本进行下载,进入目录中执行opatch apply,

[oracle@emrep11 24006111]$ /u01/app/oracle/11.2.0.4/dbhome_1/OPatch/opatch apply
Oracle Interim Patch Installer version 11.2.0.3.4
Copyright (c) 2012, Oracle Corporation.  All rights reserved.
Oracle Home       : /u01/app/oracle/11.2.0.4/dbhome_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /u01/app/oracle/11.2.0.4/dbhome_1/oraInst.loc
OPatch version    : 11.2.0.3.4
OUI version       : 11.2.0.4.0
Log file location : /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_19-06-21PM_1.log
Verifying environment and performing prerequisite checks...
Prerequisite check "CheckMinimumOPatchVersion" failed.
The details are:
The OPatch being used has version 11.2.0.3.4 while the following patch(es) require higher versions: 
Patch 17478514 requires OPatch version 11.2.0.3.5.
Patch 18031668 requires OPatch version 11.2.0.3.5.
Patch 18522509 requires OPatch version 11.2.0.3.5.
Patch 19121551 requires OPatch version 11.2.0.3.5.
Patch 19769489 requires OPatch version 11.2.0.3.5.
Patch 20299013 requires OPatch version 11.2.0.3.5.
Patch 20760982 requires OPatch version 11.2.0.3.5.
Patch 21352635 requires OPatch version 11.2.0.3.5.
Patch 21948347 requires OPatch version 11.2.0.3.5.
Patch 22502456 requires OPatch version 11.2.0.3.5.
Patch 23054359 requires OPatch version 11.2.0.3.5.
Patch 24006111 requires OPatch version 11.2.0.3.5.
Please download latest OPatch from My Oracle Support.
UtilSession failed: Prerequisite check "CheckMinimumOPatchVersion" failed.
Log file location: /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_19-06-21PM_1.log
OPatch failed with error code 73

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


解压缩,并复制至$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@emrep11 OPatch]$ cd 24006111/
[oracle@emrep11 24006111]$ ls
17478514  18522509  19769489  20760982  21948347  23054359  patchmd.xml  README.txt
18031668  19121551  20299013  21352635  22502456  24006111  README.html
[oracle@emrep11 24006111]$ /u01/app/oracle/11.2.0.4/dbhome_1/OPatch/opatch apply
Oracle Interim Patch Installer version 11.2.0.3.6
Copyright (c) 2013, Oracle Corporation.  All rights reserved.
Oracle Home       : /u01/app/oracle/11.2.0.4/dbhome_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /u01/app/oracle/11.2.0.4/dbhome_1/oraInst.loc
OPatch version    : 11.2.0.3.6
OUI version       : 11.2.0.4.0
Log file location : /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_20-00-58PM_1.log
Verifying environment and performing prerequisite checks...
Prerequisite check "CheckActiveFilesAndExecutables" failed.
The details are:
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
Prerequisite check "CheckActiveFilesAndExecutables" failed.
The details are:
Following executables are active :
/u01/app/oracle/11.2.0.4/dbhome_1/lib/libsqlplus.so
UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.Prerequisite check "CheckActiveFilesAndExecutables" failed.
Log file location: /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_20-00-58PM_1.log
OPatch failed with error code 73

执行失败,从错误信息看,有下面三个可执行程序处于激活状态,

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@emrep11 24006111]$ ps -ef | grep sqlplus
oracle   14078 26354  0 20:02 pts/9    00:00:00 grep sqlplus
oracle   14578 14558  0 Jun24 pts/7    00:00:00 sqlplus   as sysdba
[oracle@emrep11 24006111]$ kill -9 14578
[oracle@emrep11 24006111]$ ps -ef | grep sqlplus
oracle   14092 26354  0 20:02 pts/9    00:00:00 grep sqlplus

接下来需要关闭数据库,以确保libclntsh.so.11.1停止,

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@emrep11 24006111]$ /u01/app/oracle/11.2.0.4/dbhome_1/OPatch/opatch apply
Oracle Interim Patch Installer version 11.2.0.3.6
Copyright (c) 2013, Oracle Corporation.  All rights reserved.
Oracle Home       : /u01/app/oracle/11.2.0.4/dbhome_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /u01/app/oracle/11.2.0.4/dbhome_1/oraInst.loc
OPatch version    : 11.2.0.3.6
OUI version       : 11.2.0.4.0
Log file location : /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_20-03-13PM_1.log
Verifying environment and performing prerequisite checks...
Prerequisite check "CheckActiveFilesAndExecutables" failed.
The details are:
Following executables are active :
/u01/app/oracle/11.2.0.4/dbhome_1/lib/libclntsh.so.11.1
UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.
Log file location: /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_20-03-13PM_1.log
OPatch failed with error code 73

仍旧不行,说明仍有进程使用,尝试关闭监听,可参考这篇文章:《opatch error code 73: Prerequisite check “CheckActiveFilesAndExecutables” failed. (文档 ID 1942237.1)》

[oracle@emrep11 24006111]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-NOV-2016 20:04:01
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=emrep11)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                07-JUL-2016 09:43:29
Uptime                    141 days 10 hr. 20 min. 31 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/11.2.0.4/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/11.2.0.4/diag/tnslsnr/emrep11/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=emrep11)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "DCSOPEN" has 1 instance(s).
  Instance "DCSOPEN", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

[oracle@emrep11 24006111]$ lsnrctl stop
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-NOV-2016 20:04:07
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=emrep11)(PORT=1521)))
The command completed successfully

此时再次执行opatch apply,

[oracle@emrep11 24006111]$ /u01/app/oracle/11.2.0.4/dbhome_1/OPatch/opatch apply
Oracle Interim Patch Installer version 11.2.0.3.6
Copyright (c) 2013, Oracle Corporation.  All rights reserved.
Oracle Home       : /u01/app/oracle/11.2.0.4/dbhome_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /u01/app/oracle/11.2.0.4/dbhome_1/oraInst.loc
OPatch version    : 11.2.0.3.6
OUI version       : 11.2.0.4.0
Log file location : /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_20-04-12PM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   17478514  18031668  18522509  19121551  19769489  20299013  20760982  21352635  21948347  22502456  23054359  24006111  

Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.

Provide your email address to be informed of security issues, install and
initiate Oracle Configuration Manager. Easier for you if you use your My
Oracle Support Email address/User Name.
Visit http://www.oracle.com/support/policies.html for details.
Email address/User Name: 

You have not provided an email address for notification of security issues.
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]:  Y

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/app/oracle/11.2.0.4/dbhome_1')

Is the local system ready for patching? [y|n]

Could not recognize input. Please re-enter.
y
User Responded with: Y
Backing up files...
Applying sub-patch '17478514' to OH '/u01/app/oracle/11.2.0.4/dbhome_1'
Patching component oracle.rdbms, 11.2.0.4.0...
Patching component oracle.rdbms.rsf, 11.2.0.4.0...

省略中间步骤

Verifying the update...
Composite patch 24006111 successfully applied.
Log file location: /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_20-04-12PM_1.log
OPatch succeeded.

4.验证安装,

[oracle@emrep11 24006111]$ /u01/app/oracle/11.2.0.4/dbhome_1/OPatch/opatch lsinv
Oracle Interim Patch Installer version 11.2.0.3.6
Copyright (c) 2013, Oracle Corporation.  All rights reserved.
Oracle Home       : /u01/app/oracle/11.2.0.4/dbhome_1
Central Inventory : /u01/app/oracle/oraInventory
   from           : /u01/app/oracle/11.2.0.4/dbhome_1/oraInst.loc
OPatch version    : 11.2.0.3.6
OUI version       : 11.2.0.4.0
Log file location : /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/opatch2016-11-25_20-16-49PM_1.log
Lsinventory Output file location : /u01/app/oracle/11.2.0.4/dbhome_1/cfgtoollogs/opatch/lsinv/lsinventory2016-11-25_20-16-49PM.txt
--------------------------------------------------------------------------------
Installed Top-level Products (1): 
Oracle Database 11g                                                  11.2.0.4.0
There are 1 product(s) installed in this Oracle Home.
Interim patches (1) :
Patch  24006111     : applied on Fri Nov 25 20:11:44 CST 2016
Unique Patch ID:  20508568
Patch description:  "Database Patch Set Update : 11.2.0.4.161018 (24006111)"
   Created on 26 Aug 2016, 05:54:48 hrs PST8PDT
Sub-patch  23054359; "Database Patch Set Update : 11.2.0.4.160719 (23054359)"
Sub-patch  22502456; "Database Patch Set Update : 11.2.0.4.160419 (22502456)"
Sub-patch  21948347; "Database Patch Set Update : 11.2.0.4.160119 (21948347)"
Sub-patch  21352635; "Database Patch Set Update : 11.2.0.4.8 (21352635)"
Sub-patch  20760982; "Database Patch Set Update : 11.2.0.4.7 (20760982)"
Sub-patch  20299013; "Database Patch Set Update : 11.2.0.4.6 (20299013)"
Sub-patch  19769489; "Database Patch Set Update : 11.2.0.4.5 (19769489)"
Sub-patch  19121551; "Database Patch Set Update : 11.2.0.4.4 (19121551)"
Sub-patch  18522509; "Database Patch Set Update : 11.2.0.4.3 (18522509)"
Sub-patch  18031668; "Database Patch Set Update : 11.2.0.4.2 (18031668)"
Sub-patch  17478514; "Database Patch Set Update : 11.2.0.4.1 (17478514)"
   Bugs fixed:
     17288409, 21051852, 24316947, 17811429, 18607546, 17205719, 20506699
     17816865, 17922254, 23330119, 17754782, 16934803, 13364795, 17311728
     17441661, 17284817, 16992075, 17446237, 14015842, 19972569, 21756677
     17375354, 20925795, 21538558, 17449815, 19463897, 13866822, 17235750
     17982555, 17478514, 18317531, 14338435, 18235390, 20803583, 13944971
     20142975, 17811789, 16929165, 18704244, 20506706, 17546973, 20334344
     14054676, 17088068, 17346091, 18264060, 17343514, 21538567, 19680952
     18471685, 19211724, 13951456, 21847223, 16315398, 18744139, 16850630
     23177648, 19049453, 18673304, 17883081, 19915271, 18641419, 18262334
     17006183, 16065166, 18277454, 16833527, 10136473, 18051556, 17865671
     17852463, 18554871, 17853498, 18334586, 17551709, 17588480, 19827973
     17344412, 17842825, 18828868, 17025461, 11883252, 13609098, 17239687
     17602269, 19197175, 22195457, 18316692, 17313525, 12611721, 19544839
     18964939, 17600719, 18191164, 19393542, 17571306, 20777150, 18482502
     19466309, 22243719, 17040527, 17165204, 18098207, 16785708, 17465741
     17174582, 16180763, 16777840, 12982566, 19463893, 22195465, 22148226
     16875449, 12816846, 17237521, 6599380, 19358317, 17811438, 17811447
     17945983, 21983325, 18762750, 16912439, 17184721, 18061914, 17282229
     18331850, 18202441, 17082359, 18723434, 21972320, 19554106, 14034426
     18339044, 19458377, 17752995, 20448824, 17891943, 17258090, 17767676
     16668584, 18384391, 17040764, 17381384, 15913355, 18356166, 14084247
     20596234, 20506715, 21756661, 13853126, 18203837, 14245531, 16043574
     21756699, 22195441, 17848897, 17877323, 21453153, 17468141, 20861693
     17786518, 17912217, 17037130, 16956380, 18155762, 17478145, 17394950
     18641461, 18189036, 18619917, 17027426, 21352646, 16268425, 24476274
     22195492, 19584068, 18436307, 22507210, 17265217, 17634921, 13498382
     21526048, 19258504, 20004087, 17443671, 22195485, 18000422, 22321756
     20004021, 17571039, 21067387, 16344544, 18009564, 14354737, 21286665
     18135678, 18614015, 20441797, 18362222, 17835048, 16472716, 17936109
     17050888, 17325413, 14010183, 18747196, 17761775, 16721594, 17082983
     20067212, 21179898, 17302277, 18084625, 15990359, 18203835, 17297939
     17811456, 22380919, 16731148, 21168487, 14133975, 13829543, 17215560
     17694209, 17385178, 18091059, 8322815, 17586955, 17201159, 17655634
     18331812, 19730508, 18868646, 17648596, 16220077, 16069901, 17348614
     17393915, 17274537, 17957017, 18096714, 17308789, 18436647, 14285317
     19289642, 14764829, 18328509, 17622427, 16943711, 22195477, 14368995
     22502493, 17346671, 18996843, 17783588, 21343838, 16618694, 17672719
     18856999, 18783224, 17851160, 17546761, 17798953, 18273830, 22092979
     16596890, 19972566, 16384983, 17726838, 22296366, 17360606, 22321741
     13645875, 18199537, 16542886, 21787056, 17889549, 14565184, 17071721
     17610798, 20299015, 21343897, 22893153, 20657441, 17397545, 18230522
     16360112, 19769489, 12905058, 18641451, 12747740, 18430495, 17016369
     17042658, 14602788, 17551063, 19972568, 21517440, 18508861, 19788842
     14657740, 17332800, 13837378, 19972564, 17186905, 18315328, 19699191
     17437634, 22353199, 18093615, 19006849, 19013183, 17296856, 18674024
     17232014, 16855292, 17762296, 14692762, 21051840, 17705023, 22507234
     19121551, 21330264, 19854503, 21868720, 19309466, 18681862, 20558005
     18554763, 17390160, 18456514, 16306373, 13955826, 18139690, 17501491
     17752121, 21668627, 17299889, 17889583, 18673325, 19721304, 18293054
     17242746, 17951233, 18094246, 17649265, 19615136, 17011832, 16870214
     17477958, 18522509, 20631274, 16091637, 17323222, 16595641, 16524926
     18228645, 18282562, 17596908, 18031668, 17156148, 16494615, 22683225
     17545847, 17655240, 24528741, 17614134, 13558557, 17341326, 17891946
     17716305, 22657942, 16392068, 19271443, 21351877, 18092127, 17614227
     18440047, 16903536, 14106803, 18973907, 18673342, 19032867, 17389192
     17612828, 16194160, 17006570, 17721717, 17390431, 17570240, 16863422
     18325460, 19727057, 16422541, 19972570, 17267114, 18244962, 21538485
     18765602, 18203838, 16198143, 17246576, 14829250, 17835627, 18247991
     14458214, 21051862, 16692232, 17786278, 17227277, 24476265, 16042673
     16314254, 16228604, 16837842, 17393683, 23536835, 17787259, 20331945
     20074391, 15861775, 16399083, 18018515, 22683212, 18260550, 21051858
     17080436, 16613964, 17036973, 16579084, 24433711, 18384537, 18280813
     20296213, 16901385, 15979965, 23330124, 18441944, 16450169, 9756271
     17892268, 11733603, 16285691, 17587063, 21343775, 18180390, 16538760
     18193833, 21387964, 21051833, 17238511, 17824637, 16571443, 18306996
     14852021, 17853456, 18674047, 12364061, 22195448
--------------------------------------------------------------------------------
OPatch succeeded.

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

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

参考文章:
参考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)