记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

Oracle 11.2.0.4.0打PSU补丁升级至11.2.0.4.19

一、简单介绍:

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


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


备注:可查看日志确认执行是否成功,此处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


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

备注:此处SIDTESTDB

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;







前 言

4 月中旬, Oracle 官方发布了季度补丁程序包,我们生产环境的众多数据库能打补丁的都打上了补丁,不重要的数据库也不能打补丁则关停了一段时间,上个月也可真是风风火火的一个月,感觉天天都在打补丁,事后也写了篇 Oracle 11GR2 RAC 最新补丁指导,感兴趣的可以点此查看。这两日有部分小伙伴说对于单节点的数据库该怎么操作,碰巧今晚又有两台单节点的数据库需要打补丁,那么难得有时间就写一下吧,方便以后学习。

补丁准备

Linux 平台下 20194 月发布的补丁包
p6880880_112000_Linux-x86-64.zip
p29255947_112040_Linux-x86-64.zip

Oracle 官方发布的 Linux 11.2.0.4 的补丁,如上所示,可去官网下载,这里选择补丁号和平台即可,若没有 Oracle MOS 账号,我这里已经下载好了,只需要在此公众号【JiekeXu之路】后台回复【RAC补丁】即可,此补丁和 RAC 使用的是同一个补丁。也可到如下地址去下载:

https://support.oracle.com/epmos/faces/PatchSearchResults?_afrLoop=27957295908138&_afrWindowMode=0&_adf.ctrl-state=11h190dceq_4

下载完补丁后,最主要的是看一看里面的 README.html, 这里面有方法步骤英文不错的同学可直接看文档不用看下文了。

正 文

废话不多说,直接按下面步骤操作即可。

0.备份

如果目录比较大,满足条件,可以做个全备,这个很有必要,因为升级中出现的问题不可控,有备份就好说了,实在没条件的话, cp 整个 ORACLE_HOME 即可。

1.升级环境检查

$ORACLE_BASE 目录至少存在5G的升级空间,然后检查数据库版本,不能跨大版本。

su - oracle
opatch lsinventory
 注意:如果opatch 命令不可用,需要配置环境变量或者进入到 $ORACLE_HOME/OPatch 下
exportPATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH

2.上传补丁包至 /u01/app/-----------这里这个目录为oracle权限

OPatch 补丁包:p6880880_112000_Linux-x86-64.zip

数据库 PSU 补丁包:p29255947_112040_Linux-x86-64.zip

3.oracle用户解压缩

unzip p21523375_112040_AIX64-5L.zip (必须用unzip解压!!!!!)

unzip p6880880_112000_AIX64-5L.zip (解压完了生成OPatch文件夹)

注意;这里写的是 AIX 下的补丁包,正常情况下是下图的补丁包。

4. oracle用户停止监听, 停止数据库

注意,如果有两个实例,需要设置环境变量,分别停库:停另外一个实例

ps -ef |grep smon

export ORACLE_SID=test2

如果有连接,需要杀掉连接,使用如下命令:

ps -ef | grep LOCAL=NO | grep -v grep |awk'{print $2}' | xargs kill -9
停止监听
lsnrctl stop
停止数据库
sqlplus / as sysdba
shutdown immediate

5.升级opatch

[oracle@JiekeXu dbhome_1]$cd $ORACLE_HOME
[oracle@JiekeXu dbhome_1]$mv OPatch OPatch_bak190705
[oracle@JiekeXu dbhome_1]$ mv/u01/app/OPatch/ ./

检查版本

[oracle@JiekeXu dbhome_1]$ opatch version
-bash: opatch: command not found
[oracle@JiekeXu dbhome_1]$ cd OPatch
[oracle@JiekeXu OPatch]$
[oracle@JiekeXu OPatch]$ ./opatch version
OPatch Version: 11.2.0.3.21
 
OPatch succeeded.
[oracle@JiekeXu OPatch]$

6.升级补丁包p29255947_112040_Linux-x86-64.zip

cd /u01/app/29255947/29141056
opatch apply
如果没法使用此命令,设置下环境变量在执行
exportPATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
opatch apply

首先输入 y, 不需要输入邮箱直接回车,接着输入 Y 然后输入 y 如下图所示。

----------------warring 可以忽略,不报failed 就可以了

7.检查数据库版本

[oracle@JiekeXu bin]$ opatch lsinventory |grep Sub-patch
Sub-patch 28729262; "Database Patch Set Update : 11.2.0.4.190115(28729262)"
Sub-patch 28204707; "Database Patch Set Update : 11.2.0.4.181016(28204707)"
Sub-patch 27734982; "Database Patch Set Update : 11.2.0.4.180717(27734982)"
Sub-patch 27338049; "Database Patch Set Update : 11.2.0.4.180417(27338049)"
Sub-patch 26925576; "Database Patch Set Update : 11.2.0.4.180116(26925576)"
Sub-patch 26392168; "Database Patch Set Update : 11.2.0.4.171017(26392168)"
Sub-patch 26609445; "Database Patch Set Update : 11.2.0.4.170814(26609445)"
Sub-patch 25869727; "Database Patch Set Update : 11.2.0.4.170718(25869727)"
Sub-patch 24732075; "Database Patch Set Update : 11.2.0.4.170418(24732075)"
Sub-patch 24006111; "Database Patch Set Update : 11.2.0.4.161018(24006111)"
Sub-patch 23054359; "Database Patch Set Update : 11.2.0.4.160719(23054359)"
Sub-patch 22502456; "Database Patch Set Update : 11.2.0.4.160419(22502456)"
Sub-patch 21948347; "Database Patch Set Update : 11.2.0.4.160119(21948347)"
Sub-patch 21352635; "Database Patch Set Update : 11.2.0.4.8 (21352635)"
Sub-patch 20760982; "Database Patch Set Update : 11.2.0.4.7 (20760982)"
Sub-patch 20299013; "Database Patch Set Update : 11.2.0.4.6 (20299013)"
Sub-patch 19769489; "Database Patch Set Update : 11.2.0.4.5 (19769489)"
Sub-patch 19121551; "Database Patch Set Update : 11.2.0.4.4 (19121551)"
Sub-patch 18522509; "Database Patch Set Update : 11.2.0.4.3 (18522509)"
Sub-patch 18031668; "Database Patch Set Update : 11.2.0.4.2 (18031668)"
Sub-patch 17478514; "Database Patch Set Update : 11.2.0.4.1 (17478514)"

8.数据库启动,执行升级脚本(如存在多个实例,每个实例都需要执行)

具体意义可看 README.html,这里就不解释了,也懒得说了。

$cd $ORACLE_HOME/rdbms/admin
$sqlplus / as sysdba
SQL >startup;
SQL >@catbundle.sql psu apply
SQL >@utlrp.sql
SQL > @dbmsjdev.sql
SQL > exec dbms_java_dev.disable
$ rman catalog username/password@alias
RMAN> UPGRADE CATALOG;

执行这几个脚本,可去看 README.html,这里多次提起,说明他还是很重要的哦!

9.验证

SYS@PROD>col ACTION_TIME for a35
SYS@PROD>col COMMENTS for a45
SYS@PROD>select ACTION_TIME,COMMENTSfrom  registry$history;
ACTION_TIME                    COMMENTS
------------------------------------------------------------
24-AUG-13 12.03.45.119862 PM   Patchset 11.2.0.2.0
19-JAN-16 12.10.26.734097 AM   Patchset 11.2.0.2.0
26-JAN-19 10.45.57.188831 AM   PSU 11.2.0.4.180116 ------升级前数据库版本
26-JAN-19 11.52.32.664077 AM   PSU 11.2.0.4.19041611.2.0.4.190416 ---升级后的数据库版本

10.启动监听

lsnrctl start

11.oracle 数据库注册到监听

SQL> alter  system register;

12.验证监听状态

lsnrctl status
好了,按照这个步骤执行是没有问题的,基本上踩得坑已经说明了,切记目录、版本要满足要求,要是需要回退的话可以去看官方文档或者阅读 README.html。


转载请标明出处【Oracle 11.2.0.4.0打PSU补丁升级至11.2.0.4.19】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论