zoukankan      html  css  js  c++  java
  • Oracle 11g 新特性 Online Patching (Hot Patching 热补丁)说明


    一.官网说明

    MOS 的文档:RDBMSOnline Patching Aka Hot Patching [ID 761111.1] 有说明。这里取部分内容。

    A regular RDBMSpatch is comprised of one or more object (.o) files and/or libraries (.afiles). Installing a regular patch requires shuttingdown the RDBMS instance, re-linking the oracle binary, and restarting theinstance; uninstalling a regular patch requires the same steps.

    On the otherhand, an online patch is a special kind of patch that can be applied to a live,running RDBMS instance. An online patch contains a single shared library; installing an online patch does not require shutting downthe instance or relinking the oracle binary. An online patch can beinstalled/un-installed using Opatch (which uses oradebug commands toinstall/uninstall the patch).

    1.1 How does Online Patching differ than traditionalpatches?

    --online patching 与传统patch 的区别:

    1. Online patches are applied and removedfrom a running instance where traditional patches require the instances to beshutdown.
    2. Online patches utilize the oradebug interface toinstall and enable the patches where traditional diagnostic patches arelinked into the "oracle" binary.

    --online patch 使用oradebug 接口来install和 enable patches。
    3. Online patches do not require the "oracle" binary to be relinkedwhere traditional diagnostic patches do.
    4. There is additional memory consumption and processstart time penalty for online patches.

    --online patch 需要消耗一些额外的内存和时间。

    1.2 How Does the Online PatchMechanism Work ?

    --online Patch 的工作机制

    We firstconstruct a shared library that contains the relevant fixes and/or diagnostics.When we need to install the online patch, we use oradebug commands to tell eachoracle process to perform several steps:

    --首先构造一个包含相关的fix或者diagnostics的shared library,当安装online patch时,使用oradebug 命令来通知每个oracle 进程按如下步骤进行切换:

    1. Map the shared library into theiraddress space.
    2. For each modified function in the patch, change theoriginal function in the text segment so that it performs a jump/branch to the"new" version in the shared library.
    3. If the patched code references static variables inthe binary, have these references resolve to the right memory location.
    4. If the patched code references static functions inthe binary, have these references resolve to the right memory location.

    Uninstalling an online patch is the undoing of step 2: weremove the jumps/branches from the text segment and restore the originalinstructions.

    1.3 Required Support from the OS

    OnlinePatching requires two major items of support from an OS:

    --Online Patching 主要需要OS 2方面的支持:

    1. Ability to change protections on text segment pages andmodify these pages - For example, Linux x86 32-bit and Solaris 64-bitprovide COW (copy-on-write) semantics for text pages: once a text page is modifiedby a process, that process now has a private copy of that page. Note that theimplementation currently assumes COW-like semantics: it is not designed to workon an OS which provides the ability for one process to modify a text page suchthat this change affects all other processes which are sharing the sameimage/binary.

    2. Support for shared libraries or DLLs - Online patchingrequires the ability to "bundle" modified code into a shared libraryor DLL such that it can be dynamically loaded by oracle processes. Ideally, theoracle binary should also be linked in such a way that shared libraries canrefer to global functions and variables in the binary; for example, on Linux,the oracle binary is linked with the "--export-dynamic" flag. (Currently,the mkpatch utility assumes that nothing special needs to be done when apatch's shared library has references to global functions/variables in thebinary; it is assumed that the dynamic loader will handle this when the sharedlibrary is loaded.)


    Currently SupportedPlatforms:

    Online patching iscurrently supported on these platforms/systems:

    01  HP-UX Itanium.............................. ( requries OS Patch HPUX 11iv3 (11.31) + [March2008 Quality Pack + PHKL_38038] )
    02  IBM AIX on POWER Systems (64-bit) .. ( requires AIX 6.1 + TL-02 +SP-01 onwards )
    03  IBM: Linux on POWER Systems
    04  IBM: Linux on System z
    05  Linux x86
    06  Linux x86-64
    07  Microsoft Windows x86 (32-bit) .......... ( requires Opatch toolversion 11.2.0.1.1 )
    08  Microsoft Windows x86-64 (64-bit)
    09  Oracle Solaris on SPARC (64-bit) ........ ( requires SunOS kernelpatch 137111-04 )
    10  Oracle Solaris on x86-64 (64-bit) ........ ( requires kernel patch137112-04 )
    11  HP-PARISC           Notsupported
    12  Windows/Itanium   Not supported

    1.4 OPatch - How are Online Patches Installed?

    OPatch is the recommended (Oracle-supplied)tool that customers are supposed to use in order to apply or rollback patches.It maintains an inventory of patches, and ensures that two conflicting patchesare not simultaneously installed. OPatch was recently modified to supportonline patches, which means that it can apply/rollback online patches, as wellas detect conflicts between any two kinds of patches. As such, it is notnecessary for customers to execute the "oradebug patch" commands;OPatch does this.

    --Oracle 推荐使用OPatch来安装。

    All OPatch versions after 11.1.0.6 areOnline Patch aware.

    The syntax to install an Online Patch is:

    opatch apply online-connectString <SID>:<USERNAME>:<PASSWORD>:<NODE>


    example:

    $ opatch apply online -connectStringdb11202:sys:oracle -invPtrLoc/u01/app/oracle/product/11.2.0/dbhome_1/oraInst.loc

    For RAC you can list allof the instances:

    opatch apply online -connectString<SID>:<USERNAME>:<PASSWORD>:<NODE1>,<SID2>:<USERNAME>:<PASSWORD>:<NODE2>,...



    The USERNAME and PASSWORD are those of a user that hasSYSDBA privileges. The USERNAME and PASSWORD can be left blank if the OSuser applying the patch has the SYSDBA privilege. Also the NODE is optional ifthe patch is being applied locally.

    --USERNAME 和PASSWORD 需要SYSDBA 权限,或者留空,使用OS 认证。

    1.5 How to disable or remove the fix from some SIDs

    If you want disable or remove the fix forsome SIDs, You need to use the opatch util DisableOnlinePatch as following :

    opatch utilDisableOnlinePatch -connectString<SID>:<USERNAME>:<PASSWORD>:<NODE> -ph Patch location

    -ph 参数:
    Specify the valid patch directory area. This utility will disable the givenpatch in the database instances.


    for details, see:

    opatch util DisableOnlinePatch -help


    example:


    opatch util DisableOnlinePatch -connectString OP1:sys:manager: -ph/home/oracle/10188727/online

    (...)
    Invoking utility "disableonlinepatch"
    Disabling and removing online patch 'bug10188727.pch', on database 'OP2'


    OPatch succeeded.


    Note:
    the presence of "/online" at the end of "valid patch directoryarea"



    from the alert.log

    Wed Nov 09 12:47:51 2011
    Patch bug10188727.pch Disabled - Update #3
    Patch bug10188727.pch Removed - Update #4
    Wed Nov 09 12:47:53 2011
    Online patch bug10188727.pch has been disabled
    Online patch bug10188727.pch has been removed

    from oradebug:

    SQL> oradebug patchlist

    Patch File Name State
    ================ =========
    bug10188727.pch REMOVED

    1.6 How do I know which patches are eligible to be appliedonline?

    --如何判断patch 是online patch
    If the fix is online patchable there will be directory online that is created.Also the readme will contain the information regarding this, always read thereadme file when applying a patch for any new information or informationrelated to that specific patch. 

    --如果是online patch,那么patch里会包含一个目录,叫online,并且也可以查看readme 文件。



    Example:

    $ cd <PATCH_TOP>/10188727
    $ ls
    etc/ files/ online/ README.txt
    $ tree online
    online
    |-- [embde 4096] etc
    | |-- [embde 4096] config
    | | |-- [embde 290] actions.xml
    | | |-- [embde 22] deploy.xml
    | | `-- [embde 1326] inventory.xml
    | `-- [embde 4096] xml
    | |-- [embde 5376] GenericActions.xml
    | `-- [embde 1663] ShiphomeDirectoryStructure.xml
    `-- [embde 4096] files
    `-- [embde 4096] hpatch
    `-- [embde 177874] bug10188727.pch


    The better way to check if a patch is online is to use the following command

    --最好的方法是使用如下命令来检查是否是online patch

    $ cd <PATCH_TOP>/10188727
    $ opatch query -all online

    (...)
    --------------------------------------------------------------------------------
    Patch created on 2 Dec 2010, 01:44:15 hrs PST8PDT
    Need to shutdown Oracle instances: false
    Patch is roll-backable: true
    Patch is a "Patchset Update": false
    Patch is a rolling patch: true
    Patch has sql related actions: false
    Patch is anonline patch: true
    Patch is a portal patch: false
    Patch is an "auto-enabled" patch: false

    List of platforms supported:
    226: Linux x86-64

    List of bugs to be fixed:
    10188727: AFTER UPGRADING TO 11.2.0.2 SOME SQLS FAIL WITH ORA-7445[KKEIDC()+180] ERROR

    This patch is a "singleton" patch.

    This patch belongs to the "db" product family 

    List of executables affected:
    ORACLE_HOME/bin/oracle

    List of optional components:
    oracle.rdbms: 11.2.0.2.0

    List of optional actions:
    Patch the Database instances with Online Patch hpatch/bug10188727.pch

    Possible XML representation of the patch:
    <ONEOFF REF_ID="10188727" ROLLBACK="T"XML_INV_LOC="oneoffs/10188727/" ACT_INST_VER="11.2.0.2.0"INSTALL_TIME="2011.Nov.09 16:42:02 CET">
    <DESC></DESC>
    <REF_LIST>
    <REF NAME="oracle.rdbms" VER="11.2.0.2.0"HOME_IDX="0"/>
    </REF_LIST>
    <BUG_LIST>
    <BUGS>10188727</BUGS>
    </BUG_LIST>
    <FILE_LIST/>
    </ONEOFF>

    --------------------------------------------------------------------------------

    1.7 How are Online Patches rollback'ed?

    --如何回滚onlinePatch

    Using "opatch" you can rollbackthe patch:

    --使用如下命令:

    opatch rollback -id <patchID> -connectString<SID>:<USERNAME>:<PASSWORD>:<NODE1>,<SID2>:<USERNAME>:<PASSWORD>:<NODE2>,...


    The USERNAME and PASSWORD are those of a user that has SYSDBA privileges. TheUSERNAME and PASSWORD can be left blank if the OS user applying the patch hasthe SYSDBA privilege. Also the NODE is optional if the patch is being appliedlocally. 


    Using opatch does not remove the patch, it simply disables it (rolls it back)and removes the patch entry from the inventory. This behavior may change in thefuture.

    --使用opatch命令不会remove 这个patch,它是简单的disable online patch并从inventory中移除patch entry。 在以后的版本中可能会改变这种方式。



    Example:

    $ opatch rollback -id10188727 -connectString db11202:sys:oracle -invPtrLoc/u01/app/oracle/product/11.2.0/dbhome_1/oraInst.loc
    Invoking OPatch 11.2.0.1.4

    Oracle Interim Patch Installer version 11.2.0.1.4
    Copyright (c) 2010, Oracle Corporation.  All rights reserved.


    Oracle Home       :/u01/app/oracle/product/11.2.0/dbhome_1
    Central Inventory : /u01/app/oraInventory
       from           :/u01/app/oracle/product/11.2.0/dbhome_1/oraInst.loc
    OPatch version    : 11.2.0.1.4
    OUI version       : 11.2.0.2.0
    OUI location      :/u01/app/oracle/product/11.2.0/dbhome_1/oui
    Log file location :/u01/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2011-01-27_16-21-59PM.log

    Patch history file:/u01/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch_history.txt

    RollbackSession rolling back interim patch '10188727' from OH'/u01/app/oracle/product/11.2.0/dbhome_1'

    The patch should be applied/rolled back in '-all_nodes' mode only.
    Converting the RAC mode to '-all_nodes' mode.

    Running prerequisite checks...

    OPatch detected non-cluster Oracle Home from the inventory and will patch thelocal system only.

    Backing up files affected by the patch '10188727' for restore. This might takea while...

    Patching component oracle.rdbms, 11.2.0.2.0...
    The patch will be removed from active database instances.
    Disabling and removing online patch 'bug10188727.pch', on database 'db11202'

    RollbackSession removing interim patch '10188727' from inventory

    OPatch succeeded.


    ------------------------------
    On the Alert.log:

    (...)
    Thu Jan 27 16:22:07 2011
    Patch bug10188727.pch Disabled - Update #3
    Patch bug10188727.pch Removed - Update #4
    Thu Jan 27 16:22:08 2011
    Online patch bug10188727.pch has been disabled
    Online patch bug10188727.pch has been removed



    Others not recommended way are:

    --还有2种不推荐的方法:

    1. Using "oradebug" to disablethe patch

    SQL> oradebugpatch disable <patch_id>.pch

    2. Shutting theinstance down and removing the orapatch*.cfg file. After stopping theinstance do the following:

    cd $ORACLE_HOME/hpatch
    rm orapatch$ORACLE_SID.cfg


    Removing the orapatch*.cfg removes all of the online patches currentlyinstalled for the instance.

    Note:
    its recommended to rollback only when the online patch is not required for anydatabases in the same ORACLE_HOME.
    In case you have done a rollback the online patch can be disabled only by -phoption for the other SID's (see How to disable or remove the fix from someSIDs)

    二.Online Patching 说明

    说明:该部分内容摘自OCP 050 教材。

    在Oracle 11g中提出了online patch(也叫hot patch)的特性;Hot patching允许我们在实例始终在线的情况下安装,启用或禁用一个修复补丁(fix)或者诊断补丁(diagnostic patches)。

    使用热补丁可以安装、启用和禁用正在运行的活动Oracle 实例上的bug 修复或诊断补丁程序。使用热补丁是可在应用热补丁程序时避免停机的建议解决方案。Oracle 提供了使用opatch 命令行实用程序对任何Oracle 数据库进行热补丁的功能。如果代码的更改范围和复杂性都较小(例如,诊断补丁程序或小型bug 修复),则可提供热补丁程序。

    2.1 安装热补丁程序

    (1) 应用热补丁程序不需要关闭实例、重新链接Oracle二进制文件或重新启动实例。

    (2) OPatch 可用于安装或卸载热补丁程序。

    (3) OPatch 可以检测两个热补丁程序之间以及热补丁程序与常规补丁程序之间的冲突。

    可以使用以下命令来确定某个补丁程序是否为热补丁程序:

    opatch query -is_online_patch <patchlocation> or

    opatch query <patch location> -all

    注:

    打过补丁的代码将作为动态/共享库提供,该库随后会被每个Oracle 进程映射至内存中。

    (关于热补丁的机制可以参考1.2 节的内容。)

    2.2 热补丁的优点

    (1) 无停机时间,不中断业务

    (2) 安装和卸载速度极快

    (3) 与OPatch 集成:

    检测冲突

    在补丁程序清单中列出

    在RAC 环境中工作

    (4) 虽然不改变磁盘上的Oracle二进制文件,但热补丁程序在实例关闭和启动时都保持有效。

    2.3 常规补丁和热补丁

    常规补丁基本上要求关闭数据库实例。

    热补丁不需要任何停机时间。在安装热补丁时,应用程序可以继续运行。

    同样的,无需停机便可卸载已安装的热补丁程序。

    常规补丁和热补丁的对比,如下图:

     

    2.4 热补丁注意事项

    1可能不是所有平台上都有热补丁程序。当前在以下平台上有热补丁程序:

    – Linux x86

    – Linux x86-64

    – Solaris SPARC64

    --这个具体可以参考:1.3 小节。

     

    (2)要消耗一些额外的内存。

    – 确切的内存数取决于:

    — 补丁程序的大小

    — 当前运行的Oracle 进程数

    – 最小内存数:每个Oracle 进程大约占一个OS 页面

    如:一个操作系统(OS) 页面在Linux x86 上一般为4 KB,在和Solaris SPARC64 上为8 KB。

    在平均大约一千个Oracle 进程同时运行的情况下,这意味着一个小型的热补丁程序大约额外占用4 MB 内存。

    (3) 在每个Oracle 进程安装或卸载热补丁程序之前,可能会有一段极短的延迟(几秒)。

     

    (4) 并非所有bug 修复和诊断补丁程序都可用作热补丁程序。

    极大部分诊断补丁程序可作为热补丁程序提供。对于bug 修复,则具体取决于其性质。并非每个bug 修复或诊断补丁程序都可用作热补丁程序。但热补丁工具的长期目标是为关键补丁程序更新提供热补丁功能。

    (5) 不能在停机时间使用热补丁程序。

    (6) 如果可能有停机时间,则应以常规补丁程序方式安装所有相关的bug 修复。

    三. Online Patch 操作示例

    测试环境是11.2.0.3:

    SQL> select * from v$version;

    BANNER

    --------------------------------------------------------------------------------

    Oracle Database 11g Enterprise EditionRelease 11.2.0.3.0 - 64bit Production

    PL/SQL Release 11.2.0.3.0 - Production

    CORE   11.2.0.3.0      Production

    TNS for Linux: Version 11.2.0.3.0 -Production

    NLSRTL Version 11.2.0.3.0 – Production

    Google了一下,找了一个对应版本的onlinepatch:

    Oracle online patching for bug 13817131(backport for ORA-7445 near ksfqfcrx()+X during RMAN backups)

    http://jakub.wartak.pl/blog/?p=624

    这里用online patch:13817131的相关操作为例。

    3.1 解压缩:

    [oracle@dave u01]$ unzipp13817131_112030_Linux-x86-64.zip

    Archive: p13817131_112030_Linux-x86-64.zip

      creating: 13817131/

      creating: 13817131/etc/

      creating: 13817131/etc/xml/

     inflating: 13817131/etc/xml/ShiphomeDirectoryStructure.xml 

     inflating: 13817131/etc/xml/GenericActions.xml 

      creating: 13817131/etc/config/

     inflating: 13817131/etc/config/inventory.xml 

     inflating: 13817131/etc/config/actions.xml 

     inflating: 13817131/etc/config/deploy.xml 

      creating: 13817131/online/

      creating: 13817131/online/files/

      creating: 13817131/online/files/hpatch/

     inflating: 13817131/online/files/hpatch/bug13817131.pch 

      creating: 13817131/online/etc/

      creating: 13817131/online/etc/xml/

     inflating: 13817131/online/etc/xml/GenericActions.xml 

     inflating: 13817131/online/etc/xml/ShiphomeDirectoryStructure.xml 

      creating: 13817131/online/etc/config/

     inflating: 13817131/online/etc/config/actions.xml 

     inflating: 13817131/online/etc/config/deploy.xml 

     inflating: 13817131/online/etc/config/inventory.xml 

      creating: 13817131/files/

      creating: 13817131/files/lib/

      creating: 13817131/files/lib/libserver11.a/

     inflating: 13817131/files/lib/libserver11.a/ksfq.o 

     inflating: 13817131/README.txt    

    3.2 查看Patch 类型

    3.2.1 用树形结构看一下:如果是online patch,会有online 的目录:

    [oracle@dave u01]$ ls

    13817131 dave       dave2.trc  p13817131_112030_Linux-x86-64.zip  rcopy.sh     rename.sh

    app      dave1.trc  nohup.out  rcopy.out                          rcopy.sh.out

    [oracle@dave u01]$ tree 13817131

    13817131

    |-- etc

    |  |-- config

    |  |   |-- actions.xml

    |  |   |-- deploy.xml

    |  |   `-- inventory.xml

    |  `-- xml

    |      |-- GenericActions.xml

    |      `-- ShiphomeDirectoryStructure.xml

    |-- files

    |  `-- lib

    |      `-- libserver11.a

    |          `-- ksfq.o

    |-- online

    |  |-- etc

    |  |   |-- config

    |  |   |   |-- actions.xml

    |  |   |   |-- deploy.xml

    |  |   |   `-- inventory.xml

    |  |   `-- xml

    |  |       |-- GenericActions.xml

    |  |       `--ShiphomeDirectoryStructure.xml

    |  `-- files

    |      `-- hpatch

    |          `-- bug13817131.pch

    `-- README.txt

    12 directories, 13 files

    3.2.2 使用opatch 查看patch 类型:

    [oracle@dave u01]$ mv 13817131/u01/app/oracle/product/11.2.0/db_1/OPatch

    [oracle@dave u01]$ cd/u01/app/oracle/product/11.2.0/db_1/OPatch

    [oracle@dave OPatch]$ ls

    13817131 emdpatch.pl  jlib  opatch     opatch.ini  opatchprereqs

    docs     fmw          ocm   opatch.bat opatch.pl

    [oracle@dave OPatch]$ ./opatch query 13817131 -all

    Invoking OPatch 11.2.0.1.7

    Oracle Home       : /u01/app/oracle/product/11.2.0/db_1

    Central Inventory : /u01/app/oraInventory

      from           : /etc/oraInst.loc

    OPatch version    : 11.2.0.1.7

    OUI version       : 11.2.0.3.0

    Log file location :/u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2012-10-09_19-00-40ÏÂÎç.log

    --------------------------------------------------------------------------------

     Patch created on 25 Sep 2012, 08:46:37 hrsPST8PDT

     Needto shutdown Oracle instances: true

     Patch is roll-backable: true

     Patch is a "Patchset Update": false

     Patch is a rolling patch: true

     Patch has sql related actions: false

     Patch is an online patch: false

     Patch is a portal patch: false

     Patch is an "auto-enabled" patch:false

     Listof platforms supported:

      226: Linux x86-64

     Listof bugs to be fixed:

      13817131: OAM ORA-7445-[KSFQFCRX()+812] [SIGSEGV] [ADDR 0X8 ]

     Thispatch is a "singleton" patch.

     Thispatch belongs to the "db" product family

     Listof executables affected:

      ORACLE_HOME/bin/oracle

     Listof optional components:

      oracle.rdbms:  11.2.0.3.0

     Listof optional actions:

      Update /u01/app/oracle/product/11.2.0/db_1/lib/libserver11.a with/ksfq.o

       cd/u01/app/oracle/product/11.2.0/db_1/rdbms/lib

        ; make -f ins_rdbms.mk ioracleORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

     Possible XML representation of the patch:

    <ONEOFF REF_ID="13817131"ROLLBACK="T" XML_INV_LOC="oneoffs/13817131/"ACT_INST_VER="11.2.0.3.0" INSTALL_TIME="2012.Oct.09 19:00:40CST">

      <DESC></DESC>

      <REF_LIST>

         <REF NAME="oracle.rdbms" VER="11.2.0.3.0"HOME_IDX="0"/>

      </REF_LIST>

      <BUG_LIST>

        <BUG>13817131</BUG>

      </BUG_LIST>

      <FILE_LIST/>

    </ONEOFF>

    --------------------------------------------------------------------------------

    OPatch succeeded.

    这里显示为False。 用opatch is_online_patch 查看:

    [oracle@dave OPatch]$ ./opatch query -is_online_patch 13817131

    Invoking OPatch 11.2.0.1.7

    Oracle Home       : /u01/app/oracle/product/11.2.0/db_1

    Central Inventory : /u01/app/oraInventory

      from           : /etc/oraInst.loc

    OPatch version    : 11.2.0.1.7

    OUI version       : 11.2.0.3.0

    Log file location :/u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2012-10-09_19-02-47ÏÂÎç.log

    --------------------------------------------------------------------------------

     Patch is an online patch: false

    OPatch succeeded.

    这里显示的还是为False,但实际上,我们的Patch 确实是online 的patch。

    3.3 应用Patch并确认Online Patch 对内存的消耗:

    安装online patch需要额外的消耗一些内存资源,所以这里我们验证一下:

    --查看pmon 进程的内存消耗:

    [oracle@dave 13817131]$ ps -ef|grep pmon|grep-v grep

    oracle   2118     1  0 15:15 ?        00:00:13 ora_pmon_dave

    [oracle@dave 13817131]$ pmap -d 2118 |tail -20

    00007fb4ef13a000    1020 ----- 0000000000289000 008:00003libnnz11.so

    00007fb4ef239000     264 rwx-- 0000000000288000 008:00003libnnz11.so

    00007fb4ef27b000      12 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef28d000       4 rwxs- 0000000000000000 008:00003hc_dave.dat

    00007fb4ef28e000       8 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef290000     864 r-x-- 0000000000000000 008:00003libskgxp11.so

    00007fb4ef368000    1024 ----- 00000000000d8000 008:00003libskgxp11.so

    00007fb4ef468000       8 rwx-- 00000000000d8000 008:00003libskgxp11.so

    00007fb4ef46a000     392r-x-- 0000000000000000 008:00003 libcell11.so

    00007fb4ef4cc000    1024 ----- 0000000000062000 008:00003libcell11.so

    00007fb4ef5cc000      40 rwx-- 0000000000062000 008:00003libcell11.so

    00007fb4ef5d6000       8 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef5d8000       4 r-x-- 0000000000000000 008:00003libodmd11.so

    00007fb4ef5d9000    1024 ----- 0000000000001000 008:00003libodmd11.so

    00007fb4ef6d9000       4 rwx-- 0000000000001000 008:00003libodmd11.so

    00007fb4ef6da000       4 rwx-- 0000000000000000 000:00000   [ anon ]

    00007ffff0261000     132 rwx-- 0000000000000000 000:00000   [ stack ]

    00007ffff03f6000       4 r-x-- 0000000000000000 000:00000   [ anon ]

    ffffffffff600000       4 r-x-- 0000000000000000 000:00000   [ anon ]

    mapped: 958080K    writeable/private: 8056K    shared: 720900K

    --安装Patch

    oracle@dave 13817131]$ opatch apply online -connectString dave:sys:oracle

    Invoking OPatch 11.2.0.1.7

    Oracle 中间补丁程序安装程序版本11.2.0.1.7

    版权所有 (c) 2011, Oracle Corporation。保留所有权利。

    Oracle Home       : /u01/app/oracle/product/11.2.0/db_1

    Central Inventory : /u01/app/oraInventory

      from           : /etc/oraInst.loc

    OPatch version    : 11.2.0.1.7

    OUI version       : 11.2.0.3.0

    Log file location :/u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2012-10-09_19-10-51下午.log

    补丁程序只应在 '-all_nodes' 模式下应用/回退。

    将 RAC 模式转换为'-all_nodes' 模式。

    Applying interim patch '13817131' to OH'/u01/app/oracle/product/11.2.0/db_1'

    Verifying environment and performingprerequisite checks...

    是否继续? [y|n]

    y

    User Responded with: Y

    All checks passed.

    Backing up files...

    正在为组件 oracle.rdbms, 11.2.0.3.0 打补丁...

    The patch will be installed on activedatabase instances.

    正在数据库 'dave' 上安装和启用联机补丁程序 'bug13817131.pch'。

    Patch 13817131 successfully applied

    Log file location:/u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2012-10-09_19-10-51下午.log

    OPatch succeeded.

    --查看alert log

    Tue Oct 09 19:11:05 2012

    Patch file bug13817131.pch is out of syncwith oracle binary; performing fixup

    Patch file bug13817131.pch has been syncedwith oracle binary

    Patch bug13817131.pchInstalled - Update #1

    Patch bug13817131.pchEnabled - Update #2

    Tue Oct 09 19:11:07 2012

    Online patch bug13817131.pch has beeninstalled

    Online patch bug13817131.pch has beenenabled

    --再次查看pmon 进程的内存:

    [oracle@dave trace]$ ps -ef|grep pmon|grep-v grep

    oracle   2118     1  0 15:15 ?        00:00:14 ora_pmon_dave

    [oracle@dave trace]$ pmap -d 2118|tail -20

    00007fb4ef239000     264 rwx-- 0000000000288000 008:00003libnnz11.so

    00007fb4ef27b000      12 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef28c000       4 r-x-- 000000000c955000 008:00003oracle

    00007fb4ef28d000       4 rwxs- 0000000000000000 008:00003hc_dave.dat

    00007fb4ef28e000       8 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef290000     864 r-x-- 0000000000000000 008:00003libskgxp11.so

    00007fb4ef368000    1024 ----- 00000000000d8000 008:00003libskgxp11.so

    00007fb4ef468000       8 rwx-- 00000000000d8000 008:00003libskgxp11.so

    00007fb4ef46a000     392r-x-- 0000000000000000 008:00003 libcell11.so

    00007fb4ef4cc000    1024 ----- 0000000000062000 008:00003libcell11.so

    00007fb4ef5cc000      40 rwx-- 0000000000062000 008:00003libcell11.so

    00007fb4ef5d6000       8 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef5d8000       4 r-x-- 0000000000000000 008:00003libodmd11.so

    00007fb4ef5d9000    1024 ----- 0000000000001000 008:00003libodmd11.so

    00007fb4ef6d9000       4 rwx-- 0000000000001000 008:00003libodmd11.so

    00007fb4ef6da000       4 rwx-- 0000000000000000 000:00000   [ anon ]

    00007ffff0261000     132 rwx-- 0000000000000000 000:00000   [ stack ]

    00007ffff03f6000       4 r-x-- 0000000000000000 000:00000   [ anon ]

    ffffffffff600000       4 r-x-- 0000000000000000 000:00000   [ anon ]

    mapped: 964344K    writeable/private: 8068K    shared: 720900K

    --安装Patch 之前是:

    mapped: 958080K    writeable/private: 8056K    shared: 720900K

     

    private 内存增加了 8k

    --并且安装之后,从pmon 进程的内存中,可以看到多出如下3个库文件:

     [oracle@davetrace]$ pmap -d 2118|grep 13817131

    00007fb4ecf66000     168 r-x-- 0000000000000000 008:00003bug13817131.so

    00007fb4ecf90000    1020 ----- 000000000002a000 008:00003bug13817131.so

    00007fb4ed08f000      12 rwx-- 0000000000029000 008:00003bug13817131.so

    3.4 使用oradebug 来禁用patch

    在1.7 小节提到了2种Oracle 不推荐的,使用oradebug 来禁用online patch的方法。 我们这里测试一下。

    (1)使用Oradebug

    SQL> oradebug patch list

    Patch File Name                                   State

    ================                                =========

    bug13817131.pch                                  ENABLED

    SQL> oradebugpatch disable bug13817131.pch

    Statement processed.

    SQL> oradebug patch list

    Patch File Name                                   State

    ================                                =========

    bug13817131.pch                                  DISABLED

    注意,这种方法不会释放安装onlinepatch 时消耗的额外内存。

    [oracle@dave trace]$ pmap -d 2118|tail-20    

    00007fb4ef239000     264 rwx-- 0000000000288000 008:00003libnnz11.so

    00007fb4ef27b000      12 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef28c000       4 r-x-- 000000000c955000 008:00003oracle

    00007fb4ef28d000       4 rwxs- 0000000000000000 008:00003hc_dave.dat

    00007fb4ef28e000       8 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef290000     864 r-x-- 0000000000000000 008:00003libskgxp11.so

    00007fb4ef368000    1024 ----- 00000000000d8000 008:00003libskgxp11.so

    00007fb4ef468000       8 rwx-- 00000000000d8000 008:00003libskgxp11.so

    00007fb4ef46a000     392 r-x-- 0000000000000000 008:00003libcell11.so

    00007fb4ef4cc000    1024 ----- 0000000000062000 008:00003libcell11.so

    00007fb4ef5cc000      40 rwx-- 0000000000062000 008:00003libcell11.so

    00007fb4ef5d6000       8 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef5d8000       4 r-x-- 0000000000000000 008:00003libodmd11.so

    00007fb4ef5d9000    1024 ----- 0000000000001000 008:00003libodmd11.so

    00007fb4ef6d9000       4 rwx-- 0000000000001000 008:00003libodmd11.so

    00007fb4ef6da000       4 rwx-- 0000000000000000 000:00000   [ anon ]

    00007ffff0261000     132 rwx-- 0000000000000000 000:00000   [ stack ]

    00007ffff03f6000       4 r-x-- 0000000000000000 000:00000   [ anon ]

    ffffffffff600000       4 r-x-- 0000000000000000 000:00000   [ anon ]

    mapped: 964344K    writeable/private: 8068K    shared: 720900K

    --使用oradebug enable patch

    SQL> oradebug patch enablebug13817131.pch

    Statement processed.

    SQL> oradebug patch list

    Patch File Name                                   State

    ================                                =========

    bug13817131.pch                                  ENABLED

    (2)关闭实例并移除配置文件

    Shutting the instancedown and removing the orapatch*.cfg file. Afterstopping the instance do the following:

    cd $ORACLE_HOME/hpatch
    rm orapatch$ORACLE_SID.cfg

    --这里强调是关闭实例在操作,否则可能会出现其他意外情况。


    Removing the orapatch*.cfg removes all of the online patches currentlyinstalled for the instance.

    --该方法会移除所有online patch

    [oracle@dave db_1]$ cd hpatch/

    [oracle@dave hpatch]$ pwd

    /u01/app/oracle/product/11.2.0/db_1/hpatch

    [oracle@dave hpatch]$ ls

    bug13817131.pch  bug13817131.pchdave.fixup  bug13817131.so  orapatchdave.cfg

    3.5 rollback patch

    语法参考1.7 小节。

    [oracle@dave db_1]$ opatch rollback -id 13817131 -connectString dave:sys:oracle

    Invoking OPatch 11.2.0.1.7

    Oracle 中间补丁程序安装程序版本11.2.0.1.7

    版权所有 (c) 2011, Oracle Corporation。保留所有权利。

    Oracle Home       : /u01/app/oracle/product/11.2.0/db_1

    Central Inventory : /u01/app/oraInventory

      from           : /etc/oraInst.loc

    OPatch version    : 11.2.0.1.7

    OUI version       : 11.2.0.3.0

    Log file location :/u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2012-10-09_19-32-31下午.log

    RollbackSession 从OH '/u01/app/oracle/product/11.2.0/db_1' 回退中间补丁程序'13817131'

    补丁程序只应在 '-all_nodes' 模式下应用/回退。

    将 RAC 模式转换为'-all_nodes' 模式。

    正在为组件 oracle.rdbms, 11.2.0.3.0 打补丁...

    The patch will be removed from activedatabase instances.

    正在数据库 'dave' 上禁用和删除联机补丁程序 'bug13817131.pch'

    RollbackSession 从产品清单中删除中间补丁程序 '13817131'

    Log file location:/u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2012-10-09_19-32-31下午.log

    OPatch succeeded.

    --alert log信息:

    Tue Oct 09 19:32:41 2012

    Patch bug13817131.pch Disabled - Update #5

    Patch bug13817131.pch Removed - Update #6

    Tue Oct 09 19:32:44 2012

    Online patchbug13817131.pch has been disabled

    Online patchbug13817131.pch has been removed

    --查看PMON进程对内存的消耗:

    [oracle@dave trace]$ pmap -d 2118|tail-20    

    00007fb4ef239000     264 rwx-- 0000000000288000 008:00003libnnz11.so

    00007fb4ef27b000      12 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef28c000       4 r-x-- 000000000c955000 008:00003oracle

    00007fb4ef28d000       4rwxs- 0000000000000000 008:00003 hc_dave.dat

    00007fb4ef28e000       8 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef290000     864 r-x-- 0000000000000000 008:00003libskgxp11.so

    00007fb4ef368000    1024 ----- 00000000000d8000 008:00003libskgxp11.so

    00007fb4ef468000       8 rwx-- 00000000000d8000 008:00003libskgxp11.so

    00007fb4ef46a000     392 r-x-- 0000000000000000 008:00003libcell11.so

    00007fb4ef4cc000    1024 ----- 0000000000062000 008:00003libcell11.so

    00007fb4ef5cc000      40 rwx-- 0000000000062000 008:00003libcell11.so

    00007fb4ef5d6000       8 rwx-- 0000000000000000 000:00000   [ anon ]

    00007fb4ef5d8000       4 r-x-- 0000000000000000 008:00003libodmd11.so

    00007fb4ef5d9000    1024 ----- 0000000000001000 008:00003libodmd11.so

    00007fb4ef6d9000       4 rwx-- 0000000000001000 008:00003libodmd11.so

    00007fb4ef6da000       4 rwx-- 0000000000000000 000:00000   [ anon ]

    00007ffff0261000     132 rwx-- 0000000000000000 000:00000   [ stack ]

    00007ffff03f6000       4 r-x-- 0000000000000000 000:00000   [ anon ]

    ffffffffff600000       4 r-x-- 0000000000000000 000:00000   [ anon ]

    mapped: 964344K    writeable/private: 8068K    shared: 720900K

    这里我们使用oradebugdisable 和opatch rollback 都不会释放安装online patch 消耗的额外内存。当然重启实例之后,这些内存自会释放。

    ---------------------------------------------------------------------------------------

    Skype:    tianlesoftware

    QQ:       tianlesoftware@gmail.com

    Email:    tianlesoftware@gmail.com

    Blog:     http://blog.csdn.net/tianlesoftware

    Weibo:    http://weibo.com/tianlesoftware

    Twitter:  http://twitter.com/tianlesoftware

    Facebook: http://www.facebook.com/tianlesoftware

    Linkedin: http://cn.linkedin.com/in/tianlesoftware


  • 相关阅读:
    盒模型(框模型)
    边框
    尺寸及溢出处理
    HTML标签分类
    尺寸单位和颜色的取值
    选择器的优先级
    C++ 代码模板
    LC 425. Word Squares 【lock,hard】
    LC 660. Remove 9 【lock, hard】
    LC 759. Employee Free Time 【lock, hard】
  • 原文地址:https://www.cnblogs.com/tianlesoftware/p/3609155.html
Copyright © 2011-2022 走看看