一、补丁相关的术语
在数据库技术支持服务过程中,经常会遇到补丁相关的术语,现在集中做一下说明。1. interim patch/one-off patch
是我们常说的小补丁,为了修复某个bug而发布的补丁,这种补丁推荐在测试库上测试无误后再安装在生产库上。
2. merged patch:
合并的补丁,当几个小补丁之间冲突,不能同时安装的时候,需要提供这种 merged patch。补丁冲突主要是由于2个或者多个补丁修改同一个文件,但是修改的内容是不同的。
3. bundle patch
补丁集,修复多个bug。在windows 平台的oracle 没有小补丁,只有这种补丁集,至少每季度发布一次,是累积性的,也就是说每个bundle patch 会包含之前所有的bundle patch。例如 windows bundle patch 16,它会包含之前所有的15个bundle patch,所以,建议总是安装最新的bunlde patch。oracle 的集群软件和数据库软件的Windows bundle patch是同一个,例如Windows bundle patch 16 即可以打在集群上,也可以打在数据库上,要了解windows bundle patch 的补丁号,可参考mos:Note 161549.1 Oracle Database, Networking and Grid Agent Patches for Microsoft Platforms
4.critical patch update(CPU)
每季度发布一次,用来修复安全方面的一些补丁,是累积型的,目前已更名为security patch update(SPU)。可以通过下面的链接查看各个CPU所修复的具体问题:http://www.oracle.com/technetwork/topics/security/alerts-086861.html
5.patch set update (PSU)
每季度发布一次,修复比较严重的问题,包含每季度的CPU,是累积型的。虽然在描述PSU的时候会用到数据库版本的第五位,比如 Database PSU 11.2.0.3.5,但实际上打完PSU后,并不会真正的改变数据库的版本。从v$version中看到的版本还是11.2.0.3.0。
⚠️ Windows上没有CPU和PSU。oracle数据库的集群和数据库软件使用不同的PSU。可以参考下面的mos文档了解每个季度的CPU,PSU,Windows bundle patch 的具体补丁号:Assistant: Download Reference for Oracle Database/GI PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases (文档 ID 2118136.2)
6.patch set
是在大版本上发布的补丁集,修复了较多的bug,可能会包含一些增强功能,比如 11.2是一个大版本,那么11.2.0.2就是一个patch set。这种补丁集经过了严格的集成测试,也是累积型的。所以我们总是推荐安装最新的patch set。
7.diagnostic patch
诊断补丁,有时候诊断一个问题的时候。为了获得更多的诊断信息,oracle的开发部门会提供一个diagnostic patch 这种补丁不是为了修复问题,而是诊断问题。
8.composite patch
从2012年4月份的database psu 11.2.0.3.2开始,推出一种新的概念叫composite patches,这是一种新型的补丁包。它不同于其他类型的补丁包,如果第一次安装composite patches 那么composite patches所包含的全部补丁都会被安装, 后续安装的composite patches,只会安装对比前一次composite patches 有变化的部分和新增加的补丁。
二、升级PSU需注意的事项
1.下载PSU补丁时,首先确认操作系统版本以及数据库版本,之后下载相应的psu补丁集。
2.安装任何补丁时一定要仔细阅读补丁对应的readme 文件,因为每个补丁的安装步骤可能有所不同。
3.在grid infrastruncture patch set update(以下简称:GI PSU)中包含了DB PSU,所以只要下载并按照GI PSU的readme安装补丁,并使用patch auto就可以把GI 和数据库的PSU 都安装上,而且使用opatch auto 的好处是完全自动化,不需要手工停止/启动GI。安装完成后,在GI和DB的oracle_home会分别安装了GI和DB的PSU,也就是每个oracle_home下都有两个psu,一个是gi的,一个是db的。推荐这种安装方法,因为有的bug需要在gi 中修复,又需要在db中修复。
4.如果在数据库(RDBMS)的oracle_home下没创建任何的数据库,也就是在ocr中找不到oracle_home下的数据库,那么 opatch auto并不会把psu 安装在oracle_home下,只会把psu 安装在GI的oracle_home下,这种情况下,如果要对数据库的oracle_home安装psu,需另外执行:#opatch auto unzip 补丁源文件 -oh <RAC_HOME>,详见mos文档 1361802.1和1479651.1.
5.安装psu的过程是滚动的(rolling),也就是现在一台节点按照readme 中的步骤安装这个psu,当这台执行完毕,所有的资源启动后,依次在其他节点执行。⚠️opatch auto不能在多个节点同时执行。
6.保证opatch 的版本高于readme中要求的版本,否则请下载最新的opatch,下载地址:https://updates.oracle.com/download/6880880.html
⚠️opatch 工具 需要同时升级gi以及rdbms软件中的opatch工具
7.oracle database psu 、bundle patch 的命名规则一般是按照推出的先后顺序,比如在2015年10月 推出的11.2.0.4的第8个db psu 就命名为:db psu 11.2.0.4.8 ;2016年1月份推出了对psu 、spu 、 bundle patch 新的命名规则。新的命名规则以11.2.0.4为例:11.2.0.4 YYMMDD 此处的YYMMDD为patch发布的具体日期。
三、补丁下载链接
1.最新的PSU补丁下载链接,登录mos,搜索2118136.2文章Assistant: Download Reference for Oracle Database/GI PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases (文档ID 2118136.2)
2.oracle 官方推荐的补丁
Document 756671.1 Oracle Recommended Patches -- Oracle Database
3.opatch 工具的下载链接
四、举例说明
1.oracle rac 打psu 补丁主要步骤如下:
1.1 下载操作系统及数据库版本相对应的psu补丁。1.2 下载readme 中要求opatch工具版本以上。1.3 详细阅读readme升级步骤,以及注意事项,2.以下为oracle rac 11.2.0.3 打 GI PSU 11.2.0.3.6为例,步骤如下:
2.1 升级opatch 工具
把grid_home和db_home上的<ORACLE_HOME>/OPatch 进行备份,然后将下载的OPatch补丁解压到 <ORACLE_HOME>/OPatch$unzip budingwenjian.zip -d <ORACLE_HOME>通过 ./opatch version 命令查看更新结果。2.2 配置ocm
# su - grid$export JAVA_HOME=$ORACLE_HOME/jdk$GRID_HOME/OPatch/ocm/bin/emocmrsp -no_banner -output /apps/oracle/ocm.rsp
2.3 查看当前GI 以及RDBMS补丁信息
#su - grid$<GRID_HOME>/OPatch/opatch lsinventory -detail -oh <GRID_HOME>#su - oracle$<db_home>/OPatch/opatch lsinventory -detail -oh <oracle_home>
2.4 用grid用户来上传到服务器并解压
$cd <unzipped_patch_location_path>
$ unzip 补丁源文件2.5 安装或者回滚PSU 前必须用数据库的属主(一般为oracle)把EM agent停止:
#su - oracle
<DB_HOME>/bin/emctl stop dbconsole
2.6 检查补丁冲突
#su - grid
$cd <unzipped_patch_location_path> --到步骤2.4已解压的补丁文件路径下
$ $ORACLE_HOME/OPatch/opatch prereq
2.7 补丁安装
⚠️适用于gi 和db 的oracle_home都在本地盘,不在共享盘,而且没有使用ACFS
⚠️必须以root身份安装补丁(不需要停止GI)
#opatch auto <unzipped_patch_location_path> -ocmrf <ocm response file>
示例:# opatch auto /u01/oracle/patches -ocmrf /u01/app/11.2.0/grid/OPatch/ocm/bin/ocm.rsp
执行了这个命令后,会自动停止这个节点上的GI和所有资源;然后在GI和DB的oracle_home下都安装GI和DB的PSU;最后会将这个节点上的gi 和资源都启动。
2.8 升级数据库字典
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus / as sysdba
SQL>@catbundle.sql psu apply
2.9 升级catalog数据库
如果使用了rman ,需要将您的rman catalog 库升级一下,执行:
$rman catalog username/password@alias
RMAN>UPGRADE CATALOG
2.10 检查是否成功,查看dba_registry_history视图
Check the following log files in $ORACLE_BASE/cfgtoollogs/catbundle for any errors:
catbundle_PSU_<database SID>_APPLY_<TIMESTAMP>.log
catbundle_PSU_<database SID>_GENERATE_<TIMESTAMP>.log