使用Out of Place升级策略进行Oracle Patch操作

数据库升级、打补丁是我们经常面对的日常工作内容。在正常情况下,两个因素是我们必须要考虑的问题:停机时间窗和回退方案。就Oracle而言,即便是最简单的更新操作,都难以做到“零停机”。回退方案是在一旦发现新版本存在问题,迅速的回退到原有的版本,支持应用访问。

目前,Oracle推荐两种大规模升级的方法:In-Place和Out-of-Place。In Place升级方法下,升级动作直接在原有的Database Home目录下。Out-of-Place则是选择了一个新的Oracle Database Home目录。相对于In place策略,Out-of-Place在空间上需要更多的消耗。

但是,Out-of-Place的好处也是比较明显的,首先是可以比较方便的进行回退,同时在Downtime停机时间上,也有比较强的优势。

Out-of-Place支持Oracle大版本和Patch两种操作方式,本文主要介绍使用Out-Of-Place方法打补丁Patch方法。

1、环境介绍

选择Oracle 11gR2进行测试,版本为11.2.0.4基础版。

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0      Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

环境变量情况如下:

[oracle@testlife OPatch]$ env | grep ORA

ORACLE_SID=testdb

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

目标是在当前版本基础上,使用最新的PSU补丁文件。

2、补丁操作

升级OPatch工具。Oracle默认自带的OPatch通常是不能满足补丁要求的,比较稳妥的手段是到MOS上下载最新的OPatch升级包,替代原有的程序。

[oracle@testlife upload]$ cp p6880880_112000_Linux-x86-64.zip $ORACLE_HOME

[oracle@testlife upload]$ cd $ORACLE_HOME

[oracle@testlife dbhome_1]$ mv OPatch OPatch_BAK

[oracle@testlife dbhome_1]$ unzip p6880880_112000_Linux-x86-64.zip 

Archive:  p6880880_112000_Linux-x86-64.zip

creating: OPatch/

inflating: OPatch/opatch.bat       

inflating: OPatch/operr.bat       

(篇幅原因,有省略……)

[oracle@testlife dbhome_1]$ cd OPatch

[oracle@testlife OPatch]$ ./opatch lsinventory

Oracle Interim Patch Installer version 11.2.0.3.10

Copyright (c) 2016, 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.3.10

OUI version      : 11.2.0.4.0

在升级过程中,会有两套Oracle环境变量切换的动作,为避免出现问题,可以设置两套ORACLE_HOME环境变量,根据不同的情况进行切换。

[oracle@testlife OPatch]$ cd ~

[oracle@testlife ~]$ export ORACLE_OWNER_GROUP=oracle:dba

[oracle@testlife ~]$ export ORACLE_BASE=$ORACLE_BASE

[oracle@testlife ~]$ export O_ORACLE_HOME=$ORACLE_HOME –Original Oracle Home

[oracle@testlife ~]$ export O_ORACLE_HOME_NAME=`grep OHOMENAME= $O_ORACLE_HOME/oui/bin/attachHome.sh | cut -f2 -d=`

[oracle@testlife ~]$ export C_ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1_clone –Clone Environment

[oracle@testlife ~]$ export C_ORACLE_HOME_NAME=clone

[oracle@testlife ~]$ env | grep ORA

C_ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1_clone

ORACLE_OWNER_GROUP=oracle:dba

ORACLE_SID=testdb

ORACLE_BASE=/u01/app/oracle

C_ORACLE_HOME_NAME=clone

O_ORACLE_HOME_NAME=OraDb11g_home1

ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

O_ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

下面,使用原有数据库克隆新的环境Clone数据库。

--目录创建

[oracle@testlife ~]$ cd /

[oracle@testlife /]$ mkdir $C_ORACLE_HOME

[oracle@testlife /]$ chown $ORACLE_OWNER_GROUP $C_ORACLE_HOME

[oracle@testlife dbhome_1]$ pwd

/u01/app/oracle/product/11.2.0/dbhome_1

[oracle@testlife dbhome_1]$ ls -l | grep dbhome

[oracle@testlife dbhome_1]$ cd ..

[oracle@testlife 11.2.0]$ ls -l | grep dbhome

drwxr-xr-x. 75 oracle oinstall 4096 Oct 18 17:52 dbhome_1

drwxr-xr-x  2 oracle dba      4096 Oct 18 18:07 dbhome_1_clone

[oracle@testlife 11.2.0]$ cd $O_ORACLE_HOME

[oracle@testlife dbhome_1]$ tar cfp - . | (cd $C_ORACLE_HOME; tar xf - )

tar: ./bin/nmo: Cannot open: Permission denied

tar: ./bin/nmb: Cannot open: Permission denied

tar: ./bin/nmhs: Cannot open: Permission denied

tar: Exiting with failure status due to previous errors

[oracle@testlife dbhome_1]$

使用clone.pl脚本创建全新的Clone数据库。

[oracle@testlife dbhome_1]$ export ORACLE_HOME=$C_ORACLE_HOME –Clone数据库目录

[oracle@testlife dbhome_1]$ perl $ORACLE_HOME/clone/bin/clone.pl \

> ORACLE_BASE=$ORACLE_BASE \

> ORACLE_HOME=$C_ORACLE_HOME \

> ORACLE_HOME_NAME=$C_ORACLE_HOME_NAME

./runInstaller -clone -waitForCompletion  "ORACLE_BASE=/u01/app/oracle" "ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1_clone" "ORACLE_HOME_NAME=clone" -silent -noConfig -nowait 

Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.  Actual 7967 MB    Passed

Preparing to launch Oracle Universal Installer from /tmp/OraInstall2016-10-18_06-13-35PM. Please wait ...Oracle Universal Installer, Version 11.2.0.4.0 Production

Copyright (C) 1999, 2013, Oracle. All rights reserved.

You can find the log of this install session at:

/u01/app/oraInventory/logs/cloneActions2016-10-18_06-13-35PM.log

.................................................................................................... 100% Done. 

Installation in progress (Tuesday, October 18, 2016 6:13:56 PM CST)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3c80c44bd3da3e1bb4e493aa4195c610.html