一、简单介绍:
Oracle补丁一般分为2类:CPU和PSU
Ø CPU:Critical Patch Update,紧急补丁更新。每季度发布一次,用来修复安全方面的累积型补丁,即最新的CPU补丁已经包含以往的CPU补丁,只需安装最新的CPU补丁即可。CPU已更名为SPU(Security Patch Update)。
Ø PSU:Patch Set Update,补丁集更新。Oracle选取在每个季度用户下载数量最多、且得到验证具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含Bug的修复,还包含了最新的CPU。PSU通常随CPU一起发布。PSU通常是增量的,大部分PSU可以直接安装,但有些PSU必须要求安装上一个版本的PSU之后才能继续安装。
二、演示环境:
1、IP:192.168.1.220
2、操作系统:CentOS 6.10 x86_64
3、Oracle软件安装包:p13390677_112040_Linux-x86-64_1of7.zip、p13390677_112040_Linux-x86-64_2of7.zip
4、Oracle版本:11.2.0.4.0
5、OPatch软件安装包:p6880880_112000_Linux-x86-64.zip(大小为108M)
6、OPatch版本:11.2.0.3.20
7、Patch补丁包:p28729262_112040_Linux-x86-64.zip
8、Patch ID:Patch 28729262(Oracle Database Patch Set Update 11.2.0.4.190115)
三、打PSU补丁:
1、查看当前OPatch版本:$ $ORACLE_HOME/OPatch/opatch version
备注:根据补丁包中的README.html帮助文档,Patch 28729262要求的OPatch最低版本为11.2.0.3.5
2、升级OPatch版本:
# unzip -q p6880880_112000_Linux-x86-64.zip
# chown -R oracle.oinstall OPatch
# su - oracle
$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_bak
$ mv OPatch $ORACLE_HOME/
$ $ORACLE_HOME/OPatch/opatch version
3、查看系统中已打过的补丁:
$ $ORACLE_HOME/OPatch/opatch lspatches
$ $ORACLE_HOME/OPatch/opatch lsinv
SQL> col ACTION format a6
SQL> col VERSION format a8
SQL> col BUNDLE_SERIES format a13
SQL> col COMMENTS format a19
SQL> select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;
4、关闭数据库实例和监听,结束所有Oracle相关进程:
SQL> shutdown immediate
SQL> !lsnrctl stop
5、使用expdp数据泵备份全库数据
6、使用tar命令备份整个数据库目录
7、解压补丁包,并设置权限:
# unzip -q p28729262_112040_Linux-x86-64.zip
备注:解压后得到目录28729262和文件PatchSearch.xml
# chown -R oracle.oinstall 28729262
# su - oracle
$ cd 28729262
$ ls
备注:打补丁前务必仔细阅读README.html帮助文档
8、检查PSU补丁是否有冲突:
$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
备注:必须要在28729262目录中执行上述命令
9、手动生成OPatch所需的OCM(Oracle Configuration Manager)文件ocm.rsp:
$ $ORACLE_HOME/OPatch/ocm/bin/emocmrsp
$ ll -lh | grep ocm.rsp
10、打补丁:$ $ORACLE_HOME/OPatch/opatch apply -silent -ocmrf ocm.rsp
备注:上述提示信息可忽略
备注:上述提示信息可忽略
11、升级数据字典:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> !lsnrctl start
SQL> startup
SQL> @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply
SQL> shutdown immediate
SQL> startup
12、重新编译无效对象:
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
备注:可查看日志确认执行是否成功,此处SID为TESTDB
$ less /oracle/cfgtoollogs/catbundle/catbundle_PSU_TESTDB_APPLY_2019Jan27_20_02_44.log
$ less /oracle/cfgtoollogs/catbundle/catbundle_PSU_TESTDB_GENERATE_2019Jan27_20_02_43.log
13、打OJVM(Oracle JavaVM Component Database PSU)补丁:
SQL > @$ORACLE_HOME/rdbms/admin/dbmsjdev.sql
SQL > exec dbms_java_dev.disable
14、查看系统中已打过的补丁:
$ $ORACLE_HOME/OPatch/opatch lspatches
$ $ORACLE_HOME/OPatch/opatch lsinv
SQL> col ACTION format a6
SQL> col VERSION format a8
SQL> col BUNDLE_SERIES format a13
SQL> col COMMENTS format a19
SQL> select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;
四、删除PSU补丁:
1、执行ROLLBACK.sql:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> startup
SQL> @$ORACLE_HOME/rdbms/admin/catbundle_PSU_TESTDB_ROLLBACK.sql
SQL> quit
备注:此处SID为TESTDB
2、执行utlrp.sql,并关闭数据库实例和监听,结束所有Oracle相关进程:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
SQL> shutdown immediate
SQL> !lsnrctl stop
3、补丁回退:
$ $ORACLE_HOME/OPatch/opatch rollback -id 28729262
备注:上述提示信息可忽略
4、使用tar命令解压升级前备份的数据库目录
5、使用impdp数据泵导入升级前备份的全库数据
6、启动数据库实例和监听:
SQL> startup
SQL> !lsnrctl start
7、查看系统中已打过的补丁:
$ $ORACLE_HOME/OPatch/opatch lspatches
$ $ORACLE_HOME/OPatch/opatch lsinv
SQL> col ACTION format a8
SQL> col VERSION format a8
SQL> col BUNDLE_SERIES format a13
SQL> col COMMENTS format a19
SQL> select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;