本文主要介绍了如何利用ORACLE的OPATCH工具安装补丁,同时通过本文的描述,我们也应该了解确认BUG一般步骤:分析、排查相关错误信息、对比环境、最终确认。
关键字: ORACLE、OPATCH、补丁
1. 引言
近几年,随着我们ORACLE数据库的应用越来越深入,用户的环境越来越复杂,一些ORACLE常见的BUG也会偶尔的被触发。因此,我们对技术人员要求不能再象以前一样只要求会安装数据库,还应该要求其掌握如何安装补丁才行,下面我们就结合一个案例,介绍下如何利用ORACLE OPATCH工具进行补丁的安装。
2. 案例描述
前不久,某数据库监听在系统高峰期出现偶尔莫名宕掉的现象,导致客户端无法连接,但是重新启动监听又不报任何错误,及时重建监听,现象依旧。听到问题描述,我们首先检查监听停止时段的日志,发现有如下错误提示:
查询metalink后,发现有个类似案例《TNS Listener Crash with Core dump [ID 549932.1]》,适用于ORACLE10.2.0.3.0到11.1.0.6.0,平台是UNINX。该数据库版本是10.2.0.4,但是平台是LINUX的,还是有点区别,需要进一步分析,但是看下面的现象,在系统日志(/var/log/messages)中,会出现如下提示:
文档中还提到,在出现该错误的时间段,系统的虚拟内存会出现异常,于是我们通过配置跟踪文件,等待再次出现问题后,观察下系统的虚拟内存观察的情况如下:
这些现象都同文档的的错误现象一致,因此,虽然个别条件有所差别,但是可以基本判断为同一问题。接下来,我们就来看看解决问题的方法,该问题ORACLE官方提供的解决方法有2种:一种是加物理内存,一种是再当前平台打补丁6139856。由于加物理内存涉及硬件投入,我们这里考虑采用打补丁的方式尝试解决该问题。
3. 准备工作
决定了采用打补丁的解决思路,接下来就是做准备工作,首先,当然是下载补丁文件(P6139856),然后把文件上传到服务器的相关目录,并进行解压,当然在打补丁前,对数据库的备份是必不可少的,这些步骤我们就不再一一阐述,重点还是介绍下打补丁的过程。
4. 操作过程
4.1. 阅读说明
在正式操作前,我们还是应该认真阅读补丁的说明,看看有什么特别需要注意事情,这些在补丁说明中都会有提示,如果你们没有作特别的提示,我们就可以在正式环境中应用了,小补丁的安装其实比较简单,主要利用ORACLE的OPATCH工具进行操作,OPATCH工具是ORACLE自带的一个补丁安装程序,默认ORACLE安装后就自带该工具,因此无需我们再单独安装。
4.2. 检查环境
每个补丁的应用都有一定的环境,包括数据库版本、OPATCH版本等,首先应该对这些环境进行检查,通过命令opatch lsinventory检查,操作如下:
Last login: Fri Jul 30 10:08:59 2010
[oracle@wzy01 ~]$ cd 6139856/ #进入补丁文件目录
[oracle@wzy01 6139856]$ ls
etc files README.txt
[oracle@wzy01 6139856]$ opatch lsinventory #用opatch lsinventory检查环境
Invoking OPatch 10.2.0.4.2
Oracle Interim Patch Installer version 10.2.0.4.2
Copyright (c) 2007, Oracle Corporation. All rights reserved.
Oracle Home : /u01/oracle/product/db10gr2
Central Inventory : /u01/oracle/oraInventory
from : /etc/oraInst.loc
OPatch version : 10.2.0.4.2 #opatch版本
OUI version : 10.2.0.4.0
OUI location : /u01/oracle/product/db10gr2/oui
Log file location : /u01/oracle/product/db10gr2/cfgtoollogs/opatch/opatch2010-07-30_11-16-12AM.log
Lsinventory Output file location : /u01/oracle/product/db10gr2/cfgtoollogs/opatch/lsinv/lsinventory2010-07-30_11-16-12AM.txt
--------------------------------------------------------------------------------
Installed Top-level Products (2):
Oracle Database 10g 10.2.0.1.0
Oracle Database 10g Release 2 Patch Set 3 10.2.0.4.0 #oracle大版本
There are 2 products installed in this Oracle Home.
There are no Interim patches installed in this Oracle Home.
--------------------------------------------------------------------------------
OPatch succeeded.
4.3. 停数据库
在打补丁的时候,会有文件的覆盖替换,因此,大部分时候,在打补丁的时候是要求数据库处于关闭状态,因此,我们需要把数据库实例关闭。
SQL> conn / as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
4.4. 应用补丁
补丁的安装也非简单,如果前面的环境都没有问题,直接运行下opatch apply就行了,OPATCH工具会自动应用补丁,完成补丁的安装,如下:
[oracle@wzy01 6139856]$ opatch apply #在补丁文件目录中用opatch apply应用补丁
Invoking OPatch 10.2.0.4.2
Oracle Interim Patch Installer version 10.2.0.4.2
Copyright (c) 2007, Oracle Corporation. All rights reserved.
Oracle Home : /u01/oracle/product/db10gr2
Central Inventory : /u01/oracle/oraInventory
from : /etc/oraInst.loc
OPatch version : 10.2.0.4.2
OUI version : 10.2.0.4.0
OUI location : /u01/oracle/product/db10gr2/oui
Log file location : /u01/oracle/product/db10gr2/cfgtoollogs/opatch/opatch2010-07-30_11-16-16AM.log
ApplySession applying interim patch '6139856' to OH '/u01/oracle/product/db10gr2'
Running prerequisite checks...
OPatch detected non-cluster Oracle Home from the inventory and will patch the local system only.
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/oracle/product/db10gr2')
Is the local system ready for patching? [y|n] #询问是否更新文件,输入Y更新
y
User Responded with: Y
Backing up files and inventory (not for auto-rollback) for the Oracle Home
Backing up files affected by the patch '6139856' for restore. This might take a while...
Backing up files affected by the patch '6139856' for rollback. This might take a while...
Patching component oracle.rdbms, 10.2.0.4.0...
Updating archive file "/u01/oracle/product/db10gr2/lib/libn10.a" with "lib/libn10.a/nsev.o"
Updating archive file "/u01/oracle/product/db10gr2/lib32/libn10.a" with "lib32/libn10.a/nsev.o"
Patching component oracle.rdbms.rsf, 10.2.0.4.0...
Updating archive file "/u01/oracle/product/db10gr2/lib/libn10.a" with "lib/libn10.a/nsev.o"
Updating archive file "/u01/oracle/product/db10gr2/lib32/libn10.a" with "lib32/libn10.a/nsev.o"
Running make for target client_sharedlib
Running make for target ioracle
ApplySession adding interim patch '6139856' to inventory
Verifying the update...
Inventory check OK: Patch ID 6139856 is registered in Oracle Home inventory with proper meta-data.
Files check OK: Files from Patch ID 6139856 are present in Oracle Home.
The local system has been patched and can be restarted.
OPatch succeeded. #补丁更新成功
4.5. 检查核实
最后,我们要看一下,补丁安装情况,同样我们通过opatch lsinventory命令进行查看,如下:
[oracle@wzy01 6139856]$ opatch lsinventory
Invoking OPatch 10.2.0.4.2
Oracle Interim Patch Installer version 10.2.0.4.2
Copyright (c) 2007, Oracle Corporation. All rights reserved.
Oracle Home : /u01/oracle/product/db10gr2
Central Inventory : /u01/oracle/oraInventory
from : /etc/oraInst.loc
OPatch version : 10.2.0.4.2
OUI version : 10.2.0.4.0
OUI location : /u01/oracle/product/db10gr2/oui
Log file location : /u01/oracle/product/db10gr2/cfgtoollogs/opatch/opatch2010-07-30_11-23-32AM.log
Lsinventory Output file location : /u01/oracle/product/db10gr2/cfgtoollogs/opatch/lsinv/lsinventory2010-07-30_11-23-32AM.txt
--------------------------------------------------------------------------------
Installed Top-level Products (2):
Oracle Database 10g 10.2.0.1.0
Oracle Database 10g Release 2 Patch Set 3 10.2.0.4.0
There are 2 products installed in this Oracle Home.
Interim patches (1) :
Patch 6139856 : applied on Fri Jul 30 11:21:01 CST 2010
Created on 28 Jul 2008, 01:14:03 hrs PST8PDT
Bugs fixed:
6139856 #这里可以看到,补丁已经安装成功
--------------------------------------------------------------------------------
OPatch succeeded.
完成补丁安装后,重新启动数据库实例,接着观察了2天时间,没有再出现监听莫名停止的现象,证明补丁确实起了作用。
5. 结束语
通过上面的介绍,大家可以看到,只要前期准备工作做好,其实ORACLE补丁的应用其实很简单,所以大家不要对其有畏难情绪,他的操作同WINDOWS的补丁安装是一样的,希望通过这篇文章的介绍,对大家以后的工作有所帮助