oracle19c rac补丁升级

前言

本篇介绍了Oracle 19C (19.17)升级RU(升级至19.19)的详细过程。

1. RU介绍

        Oracle在每年的1月,4月,7月和10月每个季度发布一个RU。为了使客户能够在其环境稳定之后即刻获得最新的安全相关修复,将在每年的1月,4月,7月,10月为最近的两个RU提供RUR。

        RU(Release Updates)是每一个季度的版本升级。包括:最新的BUG修复、最新的安全漏洞补丁、最新添加的功能。 以19c为例,对应的升级版本升级路线是(19.1.0.0.0->19.2.0.0.0->19.3.0.0.0 ..... )。

        RUR是对RU的修订版本,包括:最新的BUG修复、最新的安全漏洞补丁,这里并没有添加最新的功能。并且只有对应RU版本的修订版。比如,在2020年7月,除了会发布RU(19.8.0.0.0)回会发布上个季度的.1补丁(19.7.1.0)和上上个季度的.2补丁(19.6.2.0)。

2. 当前环境

2.1. 补丁详情

创建工作目录,将补丁上传至该目录,以备后续升级。

mkdir -p /backup/upgrade
chown grid:oinstall -R /backup/upgrade
Patch 35037840 - GI Release Update 19.19.0.0.230418
Patch 35042068 - Database Release Update 19.19.0.0.230418

2.2. 操作系统信息

[oracle@rac01:/home/oracle]$ cat /etc/os-release 
NAME="Oracle Linux Server"
VERSION="7.6"
ID="ol"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.6"
PRETTY_NAME="Oracle Linux Server 7.6"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:7:6:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 7"
ORACLE_BUGZILLA_PRODUCT_VERSION=7.6
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=7.6

2.3. 数据库信息

[oracle@rac01:/home/oracle]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Jul 21 14:30:39 2023
Version 19.17.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.0.0

SQL> set linesize 300
SQL> select comp_id,status,version from dba_registry;

COMP_ID                        STATUS                                       VERSION
------------------------------ -------------------------------------------- ------------------------------
CATALOG                        VALID                                        19.0.0.0.0
CATPROC                        VALID                                        19.0.0.0.0
RAC                            VALID                                        19.0.0.0.0
JAVAVM                         VALID                                        19.0.0.0.0
XML                            VALID                                        19.0.0.0.0
CATJAVA                        VALID                                        19.0.0.0.0
APS                            VALID                                        19.0.0.0.0
XDB                            VALID                                        19.0.0.0.0
OWM                            VALID                                        19.0.0.0.0
CONTEXT                        VALID                                        19.0.0.0.0
ORDIM                          VALID                                        19.0.0.0.0

COMP_ID                        STATUS                                       VERSION
------------------------------ -------------------------------------------- ------------------------------
SDO                            VALID                                        19.0.0.0.0
XOQ                            VALID                                        19.0.0.0.0
OLS                            VALID                                        19.0.0.0.0
DV                             VALID                                        19.0.0.0.0

15 rows selected.

2.3. 已安装补丁信息

# grid用户通过如下命令收集当前GI补丁信息:
$ORACLE_HOME/OPatch/opatch lsinventory > /tmp/grid_patch.txt
$ORACLE_HOME/OPatch/opatch lsinv -detail -oh $ORACLE_HOME >> /tmp/grid_patch.txt
$ORACLE_HOME/OPatch/opatch lspatches >> /tmp/grid_patch.txt

# oracle用户通过如下命令收集当前DB补丁信息:
$ORACLE_HOME/OPatch/opatch lsinventory > /tmp/oracle_patch.txt
$ORACLE_HOME/OPatch/opatch lsinv -detail -oh $ORACLE_HOME >> /tmp/oracle_patch.txt
$ORACLE_HOME/OPatch/opatch lspatches >> /tmp/oracle_patch.txt

2.4. DB组件现状

获取组件信息,无效对象信息:

sqlplus / as sysdba
spool /tmp/database_invalid.sql
set linesize 300
select comp_id,status,version from dba_registry;
select owner,object_type,object_name from dba_objects where status<>'VALID';
select PATCH_ID,ACTION,STATUS,ACTION_TIME from dba_registry_sqlpatch order by ACTION_TIME; 
spool off;

2.5. 集群资源现状

grid用户获取集群进程,资源状态:

crsctl check crs
crsctl check cluster -all
crsctl status res -t

2.6. 监听服务现状

 grid用户各个节点获取:

lsnrctl status

3. 升级前备份

        因为补丁安装针对的是oracle安装目录下文件的替换,故需要将安装目录文件做一个备份。为了保证备份的文件可用,建议将数据库停止后做备份,RAC 集群时建议停止集群件备份,当出现不能解决的问题时可以将备份的ORACLE_HOME目录还原,可正常启动集群件。

        备份时,建议使用root用户以下命令带权限备份,备份完成后,启动集群和数据库

# 备份前,使用grid用户停止所有database
srvctl stop database -d orcl
# 备份前,使用root用户停止所有集群服务
crsctl stop cluster -all
# 使用root用户带权限打包备份
# 所有节点分别备份
tar -czvpf u01_bak.tar.gz /u01/app/

# 启动集群
crsctl start cluster -all
# 启动数据库
srvctl start database -d orcl

4. OPatch升级

4.1. 当前版本信息

获取grid,oracle当前opatch版本信息:

$ORACLE_HOME/OPatch/opatch version

4.2. 新版本更新

        当前opatch版本信息如果不满足当前打补丁的要求(可查看要更打补丁集中的readme来确认opatch版本的要求),需要从mos网站下载符合当前数据库版本最新的opatch包将旧版本的opatch目录替换掉,GI和DB都需要替换升级。

su - grid
cd $ORACLE_HOME
mv OPatch OPatch_bak
cd /backup/upgrade
# 解压后注意权限
unzip p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME
$ORACLE_HOME/OPatch/opatch version

su - oracle
cd $ORACLE_HOME
mv OPatch OPatch_bak
cd /backup/upgrade
# 解压后注意权限
unzip p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME
$ORACLE_HOME/OPatch/opatch version

5. 冲突验证

5.1. 运行OPatch冲突检查

GI:包含多个包,在grid用户下逐个检查:

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /backup/upgrade/35037840/35042068

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /backup/upgrade/35037840/35050331

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /backup/upgrade/35037840/35050325

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /backup/upgrade/35037840/35107512

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /backup/upgrade/35037840/33575402

DB:在oracle用户下

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /backup/upgrade/35037840/35042068
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /backup/upgrade/35037840/35050331

 5.2. 空间验证

>>>>使用grid用户检查空间是否满足GIRU部署
$ vi /tmp/patch_list_gihome.txt
/backup/upgrade/35037840/33575402
/backup/upgrade/35037840/35042068
/backup/upgrade/35037840/35050325
/backup/upgrade/35037840/35050331
/backup/upgrade/35037840/35107512
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt

>>>>使用oracle用户检查系统空间是否满足DBRU的部署
$ vi /tmp/patch_list_dbhome.txt
/backup/upgrade/35037840/35042068
/backup/upgrade/35037840/35050331
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_dbhome.txt

 5.3. 安装前分析

使用root用户,通过以下命令一次性补丁冲突检测和解决,如果one-off补丁冲突,可考虑现将该补丁回滚掉,待PSU/RU更新后,再考虑将该补丁更新上去。

/u01/app/19.3.0/grid/OPatch/opatchauto apply /backup/upgrade/35037840/ -analyze

/u01/app/19.3.0/grid/OPatch/opatchauto rollback /backup/upgrade/35037840/ -analyze

7. 补丁更新及验证

7.1. 各节点GI补丁依次更新且验证

        注意:

        升级过程会自动关闭和启动集群。

        先升级节点1的grid,再升级节点2的grid。

# 使用root用户安装部署GIRU补丁,各个节点依次更新
/u01/app/19.3.0/grid/OPatch/opatchauto apply /backup/upgrade/35037840/ -oh /u01/app/19.3.0/grid
# 部署成功之后进行验证
su - grid
$ORACLE_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lsinventory
$ORACLE_HOME/OPatch/opatch lspatches -id 33575402 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 35042068 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 35050325 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 35050331 -verify
$ORACLE_HOME/OPatch/opatch lspatches -id 35107512 -verify

7.2. 各节点DB补丁依次更新且验证

        由于 GI RU 包含 DB RU,所以 RAC 环境升级 DB 时,还将使用此 Patch 即可。

        注意:

        升级过程会自动关闭和启动集群。

        先升级节点1的database,再升级节点2的database。

# 安装ORACLE RDBMS补丁[使用root用户]
# 使用root用户操作,部署DBRU,各节点依次更新
/u01/app/oracle/product/19.3.0/db_1/OPatch/opatchauto apply /backup/upgrade/35037840/ -oh /u01/app/oracle/product/19.3.0/db_1
# 补丁验证[使用oracle用户]
su - oracle
$ORACLE_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lsinventory
$ORACLE_HOME/OPatch/opatch lspatches -id 35042068 -verify

7.3. 更新数据字典

       上面说了依次更新补丁可以减少停机时间,但是停机时间还是需要的,就是在这里的运行datapatch的时间。这个步骤是升级数据字典,针对整个database的数据字典,因此只需在一个节点上跑就可以了。主要注意的是,如果是cdb模式,需要 alter pluggable database all open,打开所有的pdb之后,再运行datapatch。

非CDB模式:

% sqlplus /nolog
SQL> Connect / as sysdba
SQL> startup
SQL> quit
% cd $ORACLE_HOME/OPatch
% ./datapatch -verbose

CDB模式:

% sqlplus /nolog
SQL> Connect / as sysdba
SQL> startup
SQL> alter pluggable database all open;
SQL> quit
% cd $ORACLE_HOME/OPatch
% ./datapatch -verbose

 7.4. 处理无效对象

su - oracle
cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba
SQL> @utlrp.sql
 
SQL> select * from product_component_version;
PRODUCT                                  VERSION                                  VERSION_FULL                             STATUS
---------------------------------------- ---------------------------------------- ---------------------------------------- ------------------------------------------------------------
Oracle Database 19c Enterprise Edition   19.0.0.0.0                               19.19.0.0.0                              Production

7.5. Upgrade Oracle Recovery Manager Catalog

如果您使用的是Oracle恢复管理器,则需要升级目录。输入以下命令进行升级。必须输入两次升级目录命令才能确认升级。

$ rman catalog username/password@alias
RMAN> UPGRADE CATALOG;
RMAN> UPGRADE CATALOG;
RMAN> EXIT;

8. 查看集群状态

crsctl check crs
crsctl check cluster -all
crsctl status res -t

你可能感兴趣的:(oracle,oracle,数据库)