在多版本环境中应用一次性Oracle 群件补丁
适用于:
Oracle企业服务器 版本: 10.1.0.2 to 11.1.0.7
常见Windows系统
常见UNIX系统
常见Linux系统
目的:
群件补丁适用于10g和11g,里面包含了在群件环境和数据库环境下安装包,由于oracle软件正常的更新都是在RAC环境下,消费者可能需要维护多个版本的多个oracle环境.这篇文档将解释如何去应用一次性群件补丁到这些不同oracle环境中去.例如,如果群件版本是10.2.0.2而集群一个RDBMS的版本是10.2.0.1,另一个却是10.1.0.5,如何应用你从Metalink下载的补丁?请看下面的解决方法:
范围和应用程序
背景:
使用Opatch工具可以得到一个oracle补丁,Opatch的最新版本可以冲Metalink下载(10.2 placeholder Bug 4898608; 10.1 placeholder Bug 2617419)
补丁的命名规范为: p<补丁号>_<发布版本>_<端口>.zip,见名识意
每个一次性群件补丁包括两部分:在zip文件顶层的群件部分和在zip文件名为custom/server/<bugnum>的子目录中的RDBMS部分,这两部分的版本是相同的,RDBMS包括管理组件和群件客户端工具包,这两部分只能安装在运行该版本的环境中.
相对于RDBMS/ASM,Oracle群件的版本必须是最新的,因此在以上的例子中,如果RDBMS目前的运行环境是10.2.0.1,那么群件版本必须是10.2.0.1或者是10.2.0.1以上版本.
对于非共享oracle群件的软件更新,采用的是循环更新模式,详见注释338706.1
在本文档中,ASM和RDBMS的环境是相同的,无论使用RDBMS的那个版本,它都以ASM版本为准,补丁修补过程采用的版本都以ASM版本号为准.RDMS修补也以ASM为准.
示例:
我们采用一个特定的版本号来演示,但是它的过程适用于所有群件版本
假设以下的oracle环境都是在一个4节点的集群中:
群件版本: 10.2.0.2
RDBMS 环境 A, 运行版本 10.2.0.2 (RAC)
RDBMS 环境 B, 运行版本 10.1.0.5 (RAC)
ASM 环境 10.2.0.2(大多实例采用ASM存储)
如果一个一次性补丁需要应用于10.2.0.2的群件软件,在大多数情况下,该补丁包含了一个RDBMS部分,该部分绑定在补丁zip文件中(在该文件的子目录custom/server/<bugnum>中),群件部分将安装在10.2.0.2的群件环境中.RDBMS部分的一次性补丁将安装在10.2.0.2的RDBMS和ASM环境中.
如果你想安装一个补丁到一个10.1.0.5RDBMS环境中的时候,Opatch将会阻塞并显示一下信息:
Oracle运行环境中不存在该补丁所需组件或版本.错误:Opatch请求更新失败.
没有需要修补的产品,这是一个不正确的Optche行为,因为它绝对不允许安装一个10.2.0.5的安装包到一个和补丁文件不同的版本的运行环境中,那么,接下来怎么做呢,怎么修补10.1.0.5的RDBMS环境呢,如何修补比群件旧的版本呢?
解决方法:
首先,在功能许可的情况下,忽视掉RDBMS部分的修补是安全,例如,如果群件修补不会影响到10.1.0.5的oracle RDBMS的运行环境,简单的跳过应用于10.1.0.5的RDBMS部分,RDBMS部分包括主要用于修补针对于数据库的管理组件,以及群件客户端组件.因为它不能很容易确定修补补丁所需的RDBMS环境,无论何时,补丁的README总是包含这条信息.
因此以上的例子中可以使用10.2.0.2的群件补丁,并应用到CRS环境,RDBMS环境和ASM环境,由于以上原因,RDBMS将会跳过(它是10.1.0.5);
如果一个修补补丁的RDBMS是必须的,Opatch将会请求一个10.1.0.5版本,这个补丁也会包含两个部分(位于top/root目录的群件部分,位于’server’目录的RDMBS部分),在我们的例子中,只有’server’部分能够应用到10.1.0.5的RDBMS环境中,群件部分将不会安装,因为我们已经有了一个更新版本的群件,在这种情况下将会跳过群件部分只执行RDBMS部分,大多数情况下,这个操作类似于:
Unix/Linux:
$ opatch apply custom/server/<bugnum> -local -oh <RDBMS_HOME>
Windows:
C:\> opatch apply custom\server\<bugnum> -local -oh <RDBMS_HOME>
对于以上的例子,下载一次性补丁10.1.0.5,只应用RDBMS部分到RDBMS的环境中.
始终记得,群件补丁包含两部分(Clusterware & RDBMS),不要企图修改Opatch,也不要安装一个不争取的安装包或共享包或对象文件到一个不匹配的版本中,例如,一个10.2.0.2的修补补丁不能安装到一个10.2.0.1的oracle环境中.
只要遵循以上步骤就能正确安装.
如果一次性补丁包含了不止一个的修补补丁,README中将会描述那个文件将会影响群件环境,那些将会影响RDBMS环境,可以帮助我们决定能否安全跳过一个RDBMS部分,另外,在大多数情况下,忽视掉RDBMS部分也是安全的,因为漏洞不会影响到更老的版本,或者是消费者在一定的承受范围内愿意忍受这样的软件缺陷.
以上讨论也适用于绑定了修补程序(包含一个RDBMS部分)的oracle群件,例如,安装一个10.2.0.2版本RDBMS部分,把它绑定到10.1.0.5的RDBMS环境中时不可能的,执行以上例子中相同的步骤来决定RDBMS修补程序对于RDBMS的环境关联性,如果有必要的话,也可以决定一个老的版本的RDBMS环境是否是必须的,大多数情况下是不必要的或者可有可无.