A. 可以通过opatch去应用的补丁(iterim patch/one-off patch,CPU,SPU,PSU等),适用于小版本中补丁的应用,数据库的版本不会发生变化
B. 通过runInstaller的方式去安装补丁,一般用于大版本的升级,数据库的版本会发生变化
在Oracle EBS 12.2之前用adpatch去应用Middle Tier的补丁,12.2开始可以使用adop
在Exadata中可以使用patchmgr应用Cell Node、IB Switch的Patch,数据库可以使用dbnodeupdate.sh
Opatch的用途
Applying the patch(应用补丁)
Rollback the patch(回滚补丁)
Conflict check(补丁冲突检查)
Report the installed components and patches(查看安装的补丁和组件)
下载OPatch
Opatch的patch号是固定的6880880,在12c还可以通过OPatch Automation Tool(opatchauto)
https://updates.oracle.com/download/<patch number>.html
https://updates.oracle.com/download/6880880.html
OPatch帮助
如果没有把OPatch加入环境变量,可以使用$ORACLE_HOME/OPatch/opatch
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
[oracle@ohs1 ~]$ opatch -help
Oracle Interim Patch Installer version 12.1.0.1.3 #注意这里是Interim
Copyright (c) 2016, Oracle Corporation. All rights reserved. Usage: opatch [ -help ] [ -report ] [ command ] command := apply compare lsinventory lspatches napply nrollback rollback query version prereq util <global_arguments> := -help Displays the help message for the command. -report Print the actions without executing. example: 'opatch -help' 'opatch -help -fmw' 'opatch apply -help' 'opatch compare -help' 'opatch lsinventory -help' 'opatch lspatches -help' 'opatch napply -help' 'opatch nrollback -help' 'opatch rollback -help' 'opatch prereq -help' 'opatch util -help' OPatch succeeded. [oracle@ohs1 ~]$-help
提供opatch的帮助信息
version
用于查询某个ORACLE_HOME下opatch的版本
lsinventory
列出某一个$ORACLE_HOME下所有安装的组件和补丁
在当前目录下应用interim patch补丁,也可指定目录,加上参数patch_location
napply
用于一次应用一系列补丁,可以使用-silent
rollback
用于回滚指定的补丁
$ORACLE_HOME/OPatch/opatch rollback -id 7319922 -invPtrLoc $ORACLE_HOME/oraInst.loc
nrollback
用于一次回滚一系列补丁,可以使用-silent
prereq
用于事前检查,比如检查patch冲突
inventory.xml文件
[oracle@ohs1 121]$ cd $ORACLE_HOME [oracle@ohs1 121]$ cat oraInst.loc inventory_loc=/pgold/oraInventory inst_group=oinstall [oracle@ohs1 121]$ cd /pgold/oraInventory/ContentsXML/ [oracle@ohs1 ContentsXML]$ ls -l total 12 -rw-rw----. 1 orgrid oinstall 329 Dec 3 06:12 comps.xml -rw-rw----. 1 orgrid oinstall 1101 Dec 3 06:12 inventory.xml -rw-rw----. 1 orgrid oinstall 292 Dec 3 06:12 libs.xml [oracle@ohs1 ContentsXML]$ cat inventory.xml <?xml version="1.0" standalone="yes" ?> <!-- Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. --> <!-- Do not modify the contents of this file by hand. --> <INVENTORY> <VERSION_INFO> <SAVED_WITH>12.1.0.2.0</SAVED_WITH> <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER> </VERSION_INFO> <HOME_LIST> <HOME NAME="Ora11g_gridinfrahome1" LOC="/pgold/orgrid/oracle/product/112" TYPE="O" IDX="1"> <NODE_LIST> <NODE NAME="ohs1"/> <NODE NAME="ohs2"/> </NODE_LIST> </HOME> <HOME NAME="OraDb11g_home1" LOC="/pgold/ordb/oracle/product/112" TYPE="O" IDX="2"> <NODE_LIST> <NODE NAME="ohs1"/> <NODE NAME="ohs2"/> </NODE_LIST> </HOME> <HOME NAME="OraGI12Home1" LOC="/pgold/orgrid/oracle/product/121" TYPE="O" IDX="3" CRS="true"> <NODE_LIST> <NODE NAME="ohs1"/> <NODE NAME="ohs2"/> </NODE_LIST> </HOME> <HOME NAME="OraDB12Home1" LOC="/pgold/ordb/oracle/product/121" TYPE="O" IDX="4"> <NODE_LIST> <NODE NAME="ohs1"/> <NODE NAME="ohs2"/> </NODE_LIST> </HOME> </HOME_LIST> <COMPOSITEHOME_LIST> </COMPOSITEHOME_LIST> </INVENTORY> [oracle@ohs1 ContentsXML]$这个文件很重要,如果文件内容有误或格式错误,Opatch查看或应用补丁时会出错,比如OPatch failed with error code 73
查看Patch冲突
$ORACLE_HOME/OPatch/opatch prereq -h
CheckConflictAgainstOH
Check if there are any conflicts between the patch(es)
to be applied and the patch(es) in the OH.
CheckConflictAgainstOHWithDetail
Check if there are any conflicts between the patch(es)
to be applied and the patch(es) in the OH, by giving
out the detailed information about the
conflicts/supersets.
CheckConflictAmongPatches
Check if there are any conflicts among the patch(es)
to be applied.
CheckConflictAmongPatchesWithDetail
Check if there are any conflicts among the patch(es)
to be applied, by giving out the detailed information
about the conflicts/supersets.
下面的命令用于检测要应用的补丁中有没有冲突的opatch prereq CheckConflictAmongPatchesWithDetail -phBaseDir <path to base dir where all the patches to be applied are kept>
下面的命令可用于检测,要应用的补丁和现在ORACLE_HOME中的补丁有没有冲突
opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <path to base dir where all the patches to be applied are kept>$ORACLE_HOME/OPatch/opatch prereq -invPtrLoc $ORACLE_HOME/oraInst.loc CheckConflictAgainstOHWithDetail -phBaseDir /patches/13923804
通过opatch apply -report查看
我们还可以使用opatch apply -report来模拟Patch应用,可以发现潜在的问题(比如Patch冲突)。这个命令不会真正地应用patch,也不需要停止数据库和监听。
Patch的应用
根据是否可以宕机,又可以分为Online Patch(在无需关闭数据库、监听的情况下直接应用,Aka hot patch)和Offline Patch(必须关闭监听、数据库等)。
Patch应用流程及注意事项
A.Pre-requisites
仔细查看readme,然后做以下的事情
检查opatch的版本(一般需要下载最新的opatch版本)
检查Perl的版本
检查前置条件(数据库的版本,Patch的前置条件是否满足)
检查补丁是否冲突(如果冲突,最好提交SR)
查看Known Issue
准备应用patch的操作手册(Pre-steps,applying patch,post steps),包括回退方案
B.Apply Patch
根据实际情况,比如是否有宕机时间,选择在线应用或离线应用
如果是RAC + DG,要现在备库上应用
不管怎样,一定要做测试库上应用
C.Post steps
如果测试,仍有问题,提交/更新SR(Service Request)
如果没有问题,安排时间在生产库上应用
如果应用的是Online Patch,在下次宕机时,回滚online patch,用正常方式(Offline mode)应用Patch
应用Offline Patch
$ cd /patches/7319922 $ opatch apply --如果是RAC,会把所有节点都应用 $ opatch apply --local,只在当前节点应用,一般用这个的会多点
回滚Offline Patch
$ORACLE_HOME/OPatch/opatch rollback -id 7319922 -invPtrLoc $ORACLE_HOME/oraInst.loc应用Online Patch
适应于OPatch版本11.1.0.6以上 -connectString格式为"SID:User:Passwd:Node" opatch apply online -connectString <SID>:<USERNAME>:<PASSWORD>:<NODE> --单实例 opatch apply online -connectString <SID>:<USERNAME>:<PASSWORD>:<NODE1>,<SID2>:<USERNAME>:<PASSWORD>:<NODE2> --RAC环境回滚Online Patch
适应于OPatch版本11.1.0.6以上 opatch rollback -id 10188727 -connectString db12c:sys:oracle -invPtrLoc /pgold/ordb/oracle/product/121/oraInst.loc --单实例 opatch rollback -id <patchID> -connectString <SID1>:<USERNAME>:<PASSWORD>:<NODE1>,<SID2>:<USERNAME>:<PASSWORD>:<NODE2> --RAC环境 通过下面的方法也可以,但不推荐使用 1. Using "oradebug" to disable the patch SQL> oradebug patch disable <patch_id>.pch 2. Shutting the instance down and removing the orapatch*.cfg file. After stopping the instance do the following: cd $ORACLE_HOME/hpatch rm orapatch$ORACLE_SID.cfgOnline Patch的最佳实践
A. 在下次实例关闭的时候,强烈建议你回滚所有的在线patch,使用正常的方式去(Offline mode)打补丁
B. Online Patch应当只用于紧急时候,比如在某一时候不能宕机,切情况危急
C. 一次只在一个实例上应用
D. 回滚时,确认所有的实例都包含在内
E. 永远不要移除$ORACLE_HOME/hpatch
注意:Online Patch需要额外的内容,算法为
Unix : memory overhead = ( # of processes +1) x size of ( .pch file)
processes的值可以从v$parameter获得
Windows: memory overhead = size of ( .pch file)
如何查看某一个patch是否可以在线安装
A. 通过patch的目录,一般来说,在线补丁,会包含online的文件夹。
$ cd <PATCH_TOP>/10188727 $ ls etc/ files/ online/ README.txt $ tree online online |-- [embde 4096] etc | |-- [embde 4096] config | | |-- [embde 290] actions.xml | | |-- [embde 22] deploy.xml | | `-- [embde 1326] inventory.xml | `-- [embde 4096] xml | |-- [embde 5376] GenericActions.xml | `-- [embde 1663] ShiphomeDirectoryStructure.xml `-- [embde 4096] files `-- [embde 4096] hpatch `-- [embde 177874] bug10188727.pchB.通过opatch命令
$ cd <PATCH_TOP>/10188727 $ opatch query -all online/opatch query -is_online_patch 10188727C.通过readme.txt readme.html文件查看
静默方式安装
我们可以在非交互模式下执行下面的命令,只需在后面加上-silent opatch <option> -silent Option : apply napply rollback nrollback常用的命令
$ORACLE_HOME/OPatch/opatch lsinventory -invPtrLoc $ORACLE_HOME/oraInst.loc $ORACLE_HOME/OPatch/opatch lsinventory -detail -invPtrLoc $ORACLE_HOME/oraInst.loc | egrep 'Oracle Application Server 10g|Patch of Oracle Application Server 10g' opatch lsinventory -bugs_fixed -invptrloc $ORACLE_HOME/oraInst.loc | egrep -i 'PSU|PATCH SET UPDATE' $ORACLE_HOME/OPatch/opatch prereq -invPtrLoc $ORACLE_HOME/oraInst.loc CheckConflictAgainstOHWithDetail -phBaseDir /patches/13923804 $ORACLE_HOME/OPatch/opatch napply -skip_subset -skip_duplicate -invPtrLoc $ORACLE_HOME/oraInst.loc $ORACLE_HOME/OPatch/opatch rollback -id 7319922 -invPtrLoc $ORACLE_HOME/oraInst.loc
常用的Note
Quick Reference to Patch Numbers for Database/GI PSU, SPU(CPU), Bundle Patches and Patchsets (Doc ID 1454618.1)
Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)
Master Note For OPatch (Doc ID 293369.1)
Reference
http://docs.oracle.com/database/122/TDPRC/managing-oracle-software-and-applying-patches.htm
http://docs.oracle.com/database/122/LADBI/downloading-and-installing-patch-updates.htm
http://docs.oracle.com/cd/E11882_01/em.112/e12255/oui7_opatch.htm#CEGCJGJD