本文主要介绍了如何利用ORACLE的OPATCH工具安装补丁,同时通过本文的描述,我们也应该了解确认BUG一般步骤:分析、排查相关错误信息、对比环境、最终确认。

关键字: ORACLE、OPATCH、补丁

1.      引言

       近几年,随着我们ORACLE数据库的应用越来越深入,用户的环境越来越复杂,一些ORACLE常见的BUG也会偶尔的被触发。因此,我们对技术人员要求不能再象以前一样只要求会安装数据库,还应该要求其掌握如何安装补丁才行,下面我们就结合一个案例,介绍下如何利用ORACLE OPATCH工具进行补丁的安装。

2.      案例描述

       前不久,某数据库监听在系统高峰期出现偶尔莫名宕掉的现象,导致客户端无法连接,但是重新启动监听又不报任何错误,及时重建监听,现象依旧。听到问题描述,我们首先检查监听停止时段的日志,发现有如下错误提示:

如何利用oracle opatch打补丁_休闲

 

 

 

 

 

    查询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 opatch打补丁_用户_02

文档中还提到,在出现该错误的时间段,系统的虚拟内存会出现异常,于是我们通过配置跟踪文件,等待再次出现问题后,观察下系统的虚拟内存观察的情况如下:

如何利用oracle opatch打补丁_Oracle_03  

  这些现象都同文档的的错误现象一致,因此,虽然个别条件有所差别,但是可以基本判断为同一问题。接下来,我们就来看看解决问题的方法,该问题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的补丁安装是一样的,希望通过这篇文章的介绍,对大家以后的工作有所帮助