Oracle RAC 11.2.0.4.0+Data Guard打补丁至11.2.0.4.201020
正文:
概述
此实验环境中,包含11.2.0.4 RAC + 11.2.0.4单机无ASM DataGuard + OGG环境
RAC采用标准安装,即数据文件、参数文件、控制文件、归档、redo、undo都保存在ASM中,grid和oracle数据库软件安装在每个节点的本地硬盘上。
打补丁全程RAC无需停止服务,只需要在打对应节点补丁时停对应节点的数据库。在打DG补丁时,需要停DG、停OGG
一、RAC上各节点打补丁
1)替换符合要求的OPatch,不能跨大版本,即11g不能使用12c的OPatch
oracle用户解压opatch和psu(此实验中zip文件放在/recover目录中)
$ unzip p6880880_112000_Linux-x86-64_11.2.0.3.23.zip
$ unzip p31718723_112040_Linux-x86-64.zip
查看补丁包目录下的README.html,其中有:
OPatch Utility Information
You must use the OPatch utility version 11.2.0.3.23 or later to apply this patch(表示至少需要11.2.0.3.23版本的OPatch,但不能跨大版本)
分别替换oracle和grid软件目录下的OPatch目录:
$ cd $ORACLE_HOME
[oracle@dgsdb01:/oracle/app/oracle/product/11.2.0/db_1]$ OPatch/opatch version
OPatch Version: 11.2.0.3.4
$ mv OPatch OPatch_11.2.0.3.4 --备份原文件
$ cp -rf /recover/OPatch . --替换新的OPatch
$ /oracle/app/11.2.0/grid/OPatch/opatch lsinventory --查看当前已经打过的补丁
$ su - root
[root@dgsdb01 ~]# cat /home/grid/.bash_profile |grep HOME
PATH=$PATH:$HOME/bin
export ORACLE_HOME=/oracle/app/11.2.0/grid; --查到grid home目录的地址
[root@dgsdb01 ~]# cd /oracle/app/11.2.0/grid
[root@dgsdb01 grid]# mv OPatch OPatch_11.2.0.3.4
[root@dgsdb01 grid]# mv /recover/OPatch .
[root@dgsdb01 grid]# chown -R grid:oinstall ./OPatch
[root@dgsdb01 grid]# chown -R grid:oinstall /recover/31718723/ <<-- 此目录为补丁解压后的目录
2)环境检查
分别切换到grid和oracle用户执行以下命令来检查opatch是否支持对当前数据库打补丁:
$ORACLE_HOME/OPatch/opatch lsinventory -detail -oh $ORACLE_HOME
检查PSU补丁是否有冲突:
注:必须要在psu解压后的目录中执行此命令
cd 31718723
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
$ORACLE_HOME/OPatch/opatch prereq CheckActiveFilesAndExecutables -ph ./
oracle用户停止dbconsole服务:
$ <ORACLE_HOME>/bin/emctl stop dbconsole
3)RAC需要使用root用户来打补丁
su - root
保险起见,先做预演:
/oracle/app/11.2.0/grid/OPatch/opatch auto /recover/31718723 -oh /oracle/app/11.2.0/grid,/oracle/app/oracle/product/11.2.0/db_1 -report
没报错,再打GI补丁:
/oracle/app/11.2.0/grid/OPatch/opatch auto /recover/31718723 -oh /oracle/app/11.2.0/grid
有时候打完补丁后,has服务没启动成功,则需要手动启动:
crsctl check crs
crsctl check has --如果has服务未启动,则将其启动,然后继续打oracle补丁
crsctl start has
继续打数据库补丁:
/oracle/app/oracle/product/11.2.0/db_1/OPatch/opatch auto /recover/31718723 -oh /oracle/app/oracle/product/11.2.0/db_1
打完主节点补丁,开始打其它节点补丁,要按顺序来,不能同时进行:
打第二个节点的数据库补丁时,可以启动第一个节点的数据库了。
srvctl start instance -d cqiwendb -n sdb01 --启第一个节点的数据库
srvctl stop instance -d cqiwendb -n dgsdb01 --停第二个节点的数据库
/oracle/app/11.2.0/grid/OPatch/opatch auto /recover/31718723 -oh /oracle/app/11.2.0/grid
/oracle/app/oracle/product/11.2.0/db_1/OPatch/opatch auto /recover/31718723 -oh /oracle/app/oracle/product/11.2.0/db_1
打完补丁后:
su - oracle
/oracle/app/oracle/product/11.2.0/db_1/OPatch/opatch lsinventory
su - root
srvctl start instance -d cqiwendb -n dgsdb01
二、由于此环境中还有DG环境,则应该在更新字典前先给DG环境打补丁:
此实验中DG为非ASM单机oracle环境,因此不能使用root用户打补丁,需要采用常规方法,使用oracle用户打补丁
1)环境准备
su - oracle
cd /soft
unzip p6880880_112000_Linux-x86-64_11.2.0.3.23.zip --这个将得到OPatch
unzip p31537677_112040_Linux-x86-64.zip --这个是只包含DB补丁的包
然后备份并替换原来的$ORACLE_HOME/OPatch
检查opatch是否能正常应用补丁:
cd 31537677
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
dg备库暂停归档应用:
sql > ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
停库停监听:
sql > shutdown immediate
lsnrctl stop
检查是否还有其它残留进程:ps -ef|grep oracle
我这台服务器上同时还安装了ogg,因此把ogg的服务也要全部停掉。
2)安装补丁:
[oracle@rhel29 31537677]$ $ORACLE_HOME/OPatch/opatch apply --注意,这个版本的opatch已经不需要再创建ocm文件了。
Oracle Interim Patch Installer version 11.2.0.3.23
Copyright (c) 2021, Oracle Corporation. All rights reserved.
Oracle Home : /oracle/app/oracle/product/11.2.0/db_1
Central Inventory : /oracle/app/oraInventory
from : /oracle/app/oracle/product/11.2.0/db_1/oraInst.loc
OPatch version : 11.2.0.3.23
OUI version : 11.2.0.4.0
Log file location : /oracle/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2021-12-09_09-30-36AM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 17478514 18031668 18522509 19121551 19769489 20299013 20760982 21352635 21948347 22502456 23054359 24006111 24732075 25869727 26609445 26392168 26925576 27338049 27734982 28204707 28729262 29141056 29497421 29913194 30298532 30670774 31103343 31537677
Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/oracle/app/oracle/product/11.2.0/db_1')
Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
...
完成时日志中会输出一条警告提示:
Stderr output:
chmod: changing permissions of `/oracle/app/oracle/product/11.2.0/db_1/bin/extjobO': Operation not permitted
make: [iextjob] Error 1 (ignored)
根据MOS上的介绍,此问题可安全忽略。
3)启动dg,启监听,开启同步进程
lsnrctl start
sqlplus / as sysdba
startup
alter database recover managed standby database disconnect from session;
SQL> select process,status,sequence# from v$managed_standby;
PROCESS STATUS SEQUENCE#
--------- ------------ ----------
ARCH CLOSING 608
ARCH CLOSING 609
ARCH CONNECTED 0
ARCH CLOSING 597
MRP0 APPLYING_LOG 598
RFS IDLE 0
RFS IDLE 0
RFS IDLE 610
RFS IDLE 0
RFS IDLE 0
RFS IDLE 598
三、RAC主节点上更新字典:
RAC只需要在一个节点上执行即可:
su - oracle
cd $ORACLE_HOME/rdbms/admin
sqlplus / AS SYSDBA
STARTUP
@catbundle.sql psu apply
@utlrp.sql
QUIT
更新rman catalog(如果有使用catalog):
If you are using the Oracle Recovery Manager, the catalog needs to be upgraded. Enter the following command to upgrade it:
$ rman catalog username/password@alias
RMAN> UPGRADE CATALOG;
完成后RAC和DG上查询打补丁记录:
/oracle/app/oracle/product/11.2.0/db_1/OPatch/opatch lsinventory
sql > select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;
ACTION VERSION BUNDLE_SERIES COMMENTS
---------- ----------- ---------------- ---------------------
APPLY 11.2.0.4 PSU Patchset 11.2.0.2.0
APPLY 11.2.0.4 PSU PSU 11.2.0.4.201020
四、检查数据库和dg同步是否正常。如果条件允许,最好是所有环境都重新启动一次。
写在最后:如有疑问,欢迎交流!




