Oracle 每个季度都会发布最新的补丁。对于生产运维人员来说,定期升级系统、打补丁是日常工作中不可缺少的部分。
相对于过去的版本,Oracle打补丁的方式已经变得比较简单,处理PSU的方法也发生了一些变化。在11g中,对于一些小bug的修复,我们可以使用OPatch工具进行补丁修复。对于大的版本升级,Oracle的PSU实际上就是一系列全新的安装文件,从MOS上下载之后就可以直接进行安装。
1、关闭数据库
Oracle的PSU升级不更新数据字典,风险较小,但是还是需要停库进行升级操作。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
停止监听服务。
[oracle@bntjftest 20299015]$ lsnrctl stop
检查服务进程
[oracle@bntjftest 20299015]$  ps aux | grep ora_
oracle    6922  0.0  0.0   5700   796 pts/3    S+   17:48   0:00 grep ora_
[oracle@bntjftest 20299015]$   ps aux | grep tns
oracle    6924  0.0  0.0   5704   796 pts/3    S+   17:48   0:00 grep tns
2、检查opatch版本信息,需要的话进行升级
 
[oracle@bntjftest OPatch]$ ./opatch version
OPatch Version: 11.2.0.1.7
OPatch succeeded.
检查发现opatch版本较低,为默认版本,所以需要升级opatch。升级方法很简单,直接mv掉原来的opatch目录,然后解压最新版本的opatch软件到ORACLE_HOME下面即可
[oracle@bntjftest OPatch]$ unzip p6880880_112000_Linux-x86-64-opatch .zip -d $ORACLE_HOME
再次检查版本,发现已经升级成功。
[oracle@bntjftest OPatch]$  ./opatch version
OPatch Version: 11.2.0.3.6
OPatch succeeded.
3、应用PSU补丁
1)插曲一、安装程序错误
[oracle@bntjftest OPatch]$ ./opatch apply ./20299015/
Oracle Interim Patch Installer version 11.2.0.3.6
Copyright (c) 2013, Oracle Corporation.  All rights reserved.
Oracle Home       : /app/oracle/product/11.2.0/dbhome_1
Central Inventory : /app/oraInventory
   from           : /app/oracle/product/11.2.0/dbhome_1/oraInst.loc
OPatch version    : 11.2.0.3.6
OUI version       : 11.2.0.4.0
Log file location : /app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2015-05-14_10-45-03AM_1.log
Verifying environment and performing prerequisite checks...
Prerequisite check "CheckPatchApplicableOnCurrentPlatform" failed.
The details are:
Patch ( 20299015 ) is not applicable>UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.
Log file location: /app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2015-05-14_10-45-03AM_1.log
OPatch failed with error code 73
不使用自动模式,手工运行,一样报错:
[oracle@bntjftest 20299015]$ /app/oracle/product/11.2.0/dbhome_1/OPatch/opatch napply -skip_subset -skip_duplicate
Oracle Interim Patch Installer version 11.2.0.3.6
Copyright (c) 2013, Oracle Corporation.  All rights reserved.
Oracle Home       : /app/oracle/product/11.2.0/dbhome_1
Central Inventory : /app/oraInventory
   from           : /app/oracle/product/11.2.0/dbhome_1/oraInst.loc
OPatch version    : 11.2.0.3.6
OUI version       : 11.2.0.4.0
Log file location : /app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2015-05-14_10-45-03AM_1.log
Verifying environment and performing prerequisite checks...
Prerequisite check "CheckPatchApplicableOnCurrentPlatform" failed.
The details are:
Patch ( 20299015 ) is not applicable>UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.
Log file location: /app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2015-05-14_10-45-03AM_1.log
OPatch failed with error code 73
上网baidu,“ UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed”, 很快就查到解决办法,明确了其实就是因为有用户进程占用了文件libclntsh.so.11
[oracle@bntjftest 20299015]$  /sbin/fuser /app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11 .1
/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1:  16470m
[oracle@bntjftest 20299015]$  ps -ef | grep 16470
oracle    16470 5399  0 14:45 pts/2    00:00:00 sqlplus   as sysdba
oracle    7780  6617  0 18:47 pts/3    00:00:00 grep 16470
[oracle@bntjftest 20299015]$  kill -9  16470
[oracle@bntjftest 20299015]$  /sbin/fuser /app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1
3)再次重新应用PSU补丁,成功

