一、简单介绍:

Oracle补丁一般分为2类:CPUPSU

Ø  CPUCritical Patch Update,紧急补丁更新。每季度发布一次,用来修复安全方面的累积型补丁,即最新的CPU补丁已经包含以往的CPU补丁,只需安装最新的CPU补丁即可。CPU已更名为SPUSecurity Patch Update)。

Ø  PSUPatch Set Update,补丁集更新。Oracle选取在每个季度用户下载数量最多、且得到验证具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含Bug的修复,还包含了最新的CPUPSU通常随CPU一起发布。PSU通常是增量的,大部分PSU可以直接安装,但有些PSU必须要求安装上一个版本的PSU之后才能继续安装。


二、演示环境:

1、IP192.168.1.220

2、操作系统:CentOS 6.10 x86_64

3、Oracle软件安装包:p13390677_112040_Linux-x86-64_1of7.zipp13390677_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 IDPatch 28729262Oracle Database Patch Set Update 11.2.0.4.190115

 

三、PSU补丁:

1、查看当前OPatch版本:$ $ORACLE_HOME/OPatch/opatch version

image.png

备注:根据补丁包中的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

image.png

3、查看系统中已打过的补丁:

$ $ORACLE_HOME/OPatch/opatch lspatches

image.png

$ $ORACLE_HOME/OPatch/opatch lsinv

image.png

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;

image.png

4、关闭数据库实例和监听,结束所有Oracle相关进程:

SQL> shutdown immediate

SQL> !lsnrctl stop

image.png

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

image.png

备注:打补丁前务必仔细阅读README.html帮助文档

8、检查PSU补丁是否有冲突:

$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./

image.png

备注:必须要在28729262目录中执行上述命令

9、手动生成OPatch所需的OCMOracle Configuration Manager)文件ocm.rsp

$ $ORACLE_HOME/OPatch/ocm/bin/emocmrsp

image.png

$ ll -lh | grep ocm.rsp

image.png

10、打补丁:$ $ORACLE_HOME/OPatch/opatch apply -silent -ocmrf ocm.rsp

image.png

image.png

image.png

备注:上述提示信息可忽略

image.png

备注:上述提示信息可忽略

11、升级数据字典:

$ sqlplus /nolog

SQL> connect / as sysdba

SQL> !lsnrctl start

SQL> startup

SQL> @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply

image.png

SQL> shutdown immediate

SQL> startup

12、重新编译无效对象:

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

image.png

备注:可查看日志确认执行是否成功,此处SIDTESTDB

$ 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、OJVMOracle JavaVM Component Database PSU)补丁:

SQL > @$ORACLE_HOME/rdbms/admin/dbmsjdev.sql

SQL > exec dbms_java_dev.disable

image.png

14、查看系统中已打过的补丁:

$ $ORACLE_HOME/OPatch/opatch lspatches

image.png

$ $ORACLE_HOME/OPatch/opatch lsinv

image.png

image.png

image.png

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;

image.png


四、删除PSU补丁:

1、执行ROLLBACK.sql

$ sqlplus /nolog

SQL> connect / as sysdba

SQL> startup

SQL> @$ORACLE_HOME/rdbms/admin/catbundle_PSU_TESTDB_ROLLBACK.sql

image.png

SQL> quit

备注:此处SIDTESTDB

2、执行utlrp.sql,并关闭数据库实例和监听,结束所有Oracle相关进程:

$ sqlplus /nolog

SQL> connect / as sysdba

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

image.png

SQL> shutdown immediate

SQL> !lsnrctl stop

image.png

3、补丁回退:

$ $ORACLE_HOME/OPatch/opatch rollback -id 28729262

image.png

image.png

备注:上述提示信息可忽略

4、使用tar命令解压升级前备份的数据库目录

5、使用impdp数据泵导入升级前备份的全库数据

6、启动数据库实例和监听:

SQL> startup

SQL> !lsnrctl start

7、查看系统中已打过的补丁:

$ $ORACLE_HOME/OPatch/opatch lspatches

image.png

$ $ORACLE_HOME/OPatch/opatch lsinv

image.png

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;

image.png