1 安装说明
在之前的博客中我们介绍了 Oracle 软件的生命周期和已经目前最新的版本:19.21.
Oracle RU 19.21 发布了
https://www.cndba.cn/cndba/dave/article/131466
Oracle 19c 有个很明显的变化,这点和 11g 有很大的区别,在 11g 中我们可以直接安装 11.2.0.4 的版本,但是 19c 不行。 官网可以直接下载的版本是 19.3,如下:
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
也就是说要安装高版本的 19c,必须先安装 19.3 的基础版本,然后通过打对应的 RU 不定来升级。
在之前的博客我们也介绍了 19.18 版本的操作,如下:
Oracle 19c 单实例 RU 从19.3.0 升级到19.18.0 操作手册
https://www.cndba.cn/cndba/dave/article/116522
Oracle 12.2 家族的补丁 RU 和 RUR 说明
https://www.cndba.cn/dave/article/4063
2 安装 19.3
参考:
Linux 7.4 平台下 Oracle 19.3 单实例安装手册
https://www.cndba.cn/dave/article/3427
3 打 19.21 RU 补丁
打 RU 补丁过程和之前版本一样,我们这里简单记录一下 19.21 打补丁的过程。
Oracle 19c 单实例 RU 从19.3.0 升级到19.18.0 操作手册
https://www.cndba.cn/cndba/dave/article/116522
3.1 检查OPatch工具版本
19.21 需要12.2.0.1.37 以上的 OPatch 工具:
Patch 35643107 requires OPatch version 12.2.0.1.37 or later.
[dave@www.cndba.cn OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.40
OPatch succeeded.
[dave@www.cndba.cn OPatch]$
如果从其他版本进行升级,可以从patch 6880880 下载最新的OPatch。 关于OPatch 工具升级的方法参考我之前的博客,如下:
Oracle 更新 OPatch 工具版本 的方法 说明
https://www.cndba.cn/Dave/article/1353
3.2 检查Patch 是否冲突
进入补丁,执行检查:
[dave@www.cndba.cn 35643107]$ /data/app19c/oracle/product/19.3.0/dbhome_1/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Copyright (c) 2024, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /data/app19c/oracle/product/19.3.0/dbhome_1
Central Inventory : /data/app/oraInventory
from : /data/app19c/oracle/product/19.3.0/dbhome_1/oraInst.loc
OPatch version : 12.2.0.1.29
OUI version : 12.2.0.7.0
Log file location : /data/app19c/oracle/product/19.3.0/dbhome_1/cfgtoollogs/opatch/opatch2024-01-09_22-36-04PM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
[dave@www.cndba.cn 35643107]$
3.3 应用patch
这里有几点注意事项:
- 如果是物理DG,那么主备库都需要安装Patch,可以先在备库安装,再安装主库,操作步骤可以参考:Document 278641.1。
- 对于RAC 环境,可以使用OPatch rolling 方式来安装,这样没有停机时间,具体操作可以参考:Document 244241.1。
- 对于单实例,必须关闭待升级ORACLE HOME关联的所有实例和监听,并且包括退出所有的sqlplus窗口。
关闭实例和监听,并退出sqlplus:
[dave@www.cndba.cn 35643107]$ lsnrctl stop
[dave@www.cndba.cn 35643107]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 9 22:37:03 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[dave@www.cndba.cn 35643107]$
在 pathc 目录下执行:
[dave@www.cndba.cn 35643107]$ pwd
/data/software/Oracle/19.21/35643107
[dave@www.cndba.cn 35643107]$ $ORACLE_HOME/OPatch/opatch apply
……
Patching component oracle.jdk, 1.8.0.201.0...
Patch 35643107 successfully applied.
Sub-set patch [29517242] has become inactive due to the application of a super-set patch [35643107].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /data/app19c/oracle/product/19.3.0/dbhome_1/cfgtoollogs/opatch/opatch2024-01-10_12-50-15PM_1.log
OPatch succeeded.
[dave@www.cndba.cn 35643107]$
3.4 加载变化的SQL到数据库
安装补丁之后,还需要将有变化的SQL加载到数据库中,这里可以直接运行Datapatch工具将这些修改的SQL重新加载到数据库中,如果是RAC环境,只需要在一个节点执行就可以了。
根据readme的说明,操作步骤如下:
sqlplus /nolog
SQL> Connect / as sysdba
SQL> startup
SQL> alter pluggable database all open;
SQL> quit
cd $ORACLE_HOME/OPatch
./datapatch -verbose
datapatch命令只对打开的数据库生效,所有Oracle建议在执行该命令之前将CDB和所有的PDB都打开,一次更新掉。 但如果有部分PDB没有打开,也可以在打开之后,重新运行datapatch命令并制定pdb实例名,比如: ./datapatch -pdbs dave
这种情况可以参考之前的博客:
Oracle 18c 单实例 RUR 从18.3.0 升级到18.3.1 操作手册
https://www.cndba.cn/dave/article/3138
我们这里将所有的PDB 都打开后在执行datapatch工具。
运行datapatch工具:
[dave@www.cndba.cn dbs]$ cd $ORACLE_HOME/OPatch
[dave@www.cndba.cn OPatch]$ ./datapatch -verbose
……
Validating logfiles...done
Patch 35643107 apply (pdb CDB$ROOT): SUCCESS
logfile: /data/app19c/oracle/cfgtoollogs/sqlpatch/35643107/25405995/35643107_apply_CNDBA_CDBROOT_2024Jan10_13_03_10.log (no errors)
Patch 35643107 apply (pdb PDB$SEED): SUCCESS
logfile: /data/app19c/oracle/cfgtoollogs/sqlpatch/35643107/25405995/35643107_apply_CNDBA_PDBSEED_2024Jan10_13_12_53.log (no errors)
Patch 35643107 apply (pdb DAVE): SUCCESS
logfile: /data/app19c/oracle/cfgtoollogs/sqlpatch/35643107/25405995/35643107_apply_CNDBA_DAVE_2024Jan10_13_12_53.log (no errors)
Automatic recompilation incomplete; run utlrp.sql to revalidate.
PDBs: DAVE PDB$SEED
SQL Patching tool complete on Wed Jan 10 13:20:45 2024
3.5 查看版本变化
datapatch 工具加载修改的SQL之后会将patch添加到dba_registry_sqlpatch试图中,以反应patch的应用情况。 查询试图可以看到patch的APPLY状态为”SUCCESS”。
set lines 200
col status for a10
col action for a10
col action_time for a30
col description for a60
col patch_type for a10
select patch_id,patch_type,action,status,action_time,description from dba_registry_sqlpatch;
PATCH_ID PATCH_TYPE ACTION STATUS ACTION_TIME DESCRIPTION
---------- ---------- ---------- ---------- ------------------------------ ------------------------------------------------------------
29517242 RU APPLY SUCCESS 09-JAN-24 09.46.57.554752 PM Database Release Update : 19.3.0.0.190416 (29517242)
35643107 RU APPLY SUCCESS 10-JAN-24 01.20.19.484710 PM Database Release Update : 19.21.0.0.231017 (35643107)
col version for a25
col comments for a80
select ACTION_TIME,VERSION,COMMENTS from dba_registry_history;
ACTION_TIME VERSION COMMENTS
------------------------------ ------------------------- --------------------------------------------------------------------------------
19 RDBMS_19.21.0.0.0DBRU_LINUX.X64_230923
09-JAN-24 09.46.50.398253 PM 19.0.0.0.0 Patch applied on 19.3.0.0.0: Release_Update - 190410122720
10-JAN-24 01.12.10.472997 PM 19.0.0.0.0 Patch applied from 19.3.0.0.0 to 19.21.0.0.0: Release_Update - 230930151951
3.6 处理无效对象
最后一步就是处理无效对象,因为之前datapatch命令会加载SQL,这个过程可能会产生无效对象。 可以执行@utlrp.sql脚本处理这些无效对象。
SQL> @/data/app19c/oracle/product/19.3.0/dbhome_1/rdbms/admin/utlrp.sql
至此,我们升级19.21 的操作全部结束, 注意验证版本需要通过dba_registry_sqlpatch视图来查看,如果查询v$version 视图,版本还是没有变化的。
版权声明:本文为博主原创文章,未经博主允许不得转载。