安装一次性补丁之前,需要检查即将安装的这个一次性补丁是否与数据库中已经安装过的一次性补丁有冲突,补丁在没有安装到数据库之前,冲突与否都是很难预料的,这时需要使用Opatch工具来检验。
可以参照文档ID 224346.1来下载需要的Opatch版本
从该文档中可以下载相应的Opatch,文档中有介绍各个不同的ORACLE产品所需要的Opatch >>>>> OPATCH PLACEHOLDER Patch 6880880
How to install Opatch utility ?
1. Download the latest Opatch utility
2. Take a backup of older version of OPatch utility under $ORACLE_HOME and unzip the downloaded file
cd $ORACLE_HOME mv OPatch OPatch.bkp unzip <download directory>/p6880880_<version>_<platform>.zip cd OPatch ./opatch version |
3. Include OPatch in PATH
export PATH=$ORACLE_HOME/OPatch:$PATH |
当确认安装完正确版本的Opatch后,开始下面的补丁冲突检测,运行如下命令来检查是否在计划安装的补丁之间有冲突。
这条命令会给出冲突的详细信息,从而检查计划安装的补丁之间是否有冲突。
$ opatch prereq CheckConflictAmongPatchesWithDetail -phBaseDir <要安装的所有补丁所在的路径> |
例如
$opatch prereq CheckConflictAmongPatchesWithDetail -phBaseDir $ORACLE_HOME/patches |
运行如下命令检查计划安装的补丁与在这个Oracle Home 中已经安装的补丁之间是否有冲突
$ opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <要安装的所有补丁所在的路径> |
这条命令会给出冲突的详细信息,从而检查计划安装的补丁与Oracle Home 中已有的补丁是否冲突。
注意:"opatch prereq" 命令中无法使用-skip_duplicate 和-skip_subset 选项,"opatch prereq"会自动地将所有子集和重复显示为"superset",这样就可以忽略它们,而只有prereq 输出中显示为"conflict"的需要注意。
已知问题
问题1:
INFO:Unable to create Patch Object.
Exception occured : PatchObject constructor: Input file "/dba/downloads/patch_candidates/6646853/etc/config/actions" or "/dba/downloads/patch_candidates/6646853/etc/config/inventory" does not exist.
当对10.2.0.3 及以上版本的CPU 补丁运行opatch checkconflict 命令时,要从补丁目录中移除README.html 和patchmd.xml 文件。(要从phBaseDir 目录中移除任何其他的单个文件,例如cpu_root.sh),然后再执行命令,否则你会遇到上述错误。
问题2:
当使用'opatch prereq'检查潜在的冲突时,可能会遇到如下错误
Exception occured : PatchObject constructor: Input file "/refresh/32bit/app/oracle/product/10.2.0.3/patches/6081547/etc/config/actions" or "/refresh/32bit/app/oracle/product/10.2.0.3/patches/6081547/etc/config/inventory" does not exist.
请参照如下MOS 文档去解决:
Note 788181.1 - opatch prereq CheckConflict fails with Exception occured : PatchObject constructor:Input file does not exist |