升级Oracle 单实例数据库19.3到19.22

需求

我的Oracle Database Vagrant Box初始版本为19.3,需要升级到最新的RU,当前为19.22。

以下操作时间为为2024年2月5日。

补丁下载

补丁下载文档参见MOS文档:Primary Note for Database Proactive Patch Program (Doc ID 888.1)。

补丁安装文档参见文档(链接在下载页面中):Patch 35943157 - Database Release Update 19.22.0.0.240116

也可以从MOS的"Patch & Updates"标签页中下载:

结果中的Patch 35943157即我们需要的:

停止数据库和监听

断开所有与数据库的连接,如应用,如管理客户端(Oracle EM, SQL Developer等)。

停止数据库:

sql 复制代码
shutdown immediate

停止监听:

bash 复制代码
lsnrctl stop

备份Oracle Home

参考MOS文档: How to Perform ORACLE_HOME Backup? (Doc ID 565017.1)

以oracle用户执行以下脚本:

bash 复制代码
# 创建备份目录
mkdir ~/backup
# 本例中的ORACLE_HOME为/opt/oracle/product/19c/dbhome_1
cd $ORACLE_HOME
# 切换到上一级目录:/opt/oracle/product/19c
cd ..
# 启动备份
tar -pcvf ~/backup/oracle_home_bkup.tar dbhome_1

备份文件约7.4G:

bash 复制代码
$ ls -l ~/backup/
total 7248532
-rw-r--r--. 1 oracle oinstall 7422494720 Feb  5 13:42 oracle_home_bkup.tar

安装最新版的OPatch

下载OPatch 12.2.0.1.41 for DB 19.0.0.0.0 (Jan 2024),约120M。

bash 复制代码
$ ls -l /vagrant/p6880880_190000_Linux-x86-64.zip
-rwxrwxrwx. 1 vagrant vagrant 127629034 Feb  5 13:58 /vagrant/p6880880_190000_Linux-x86-64.zip

升级过程参见Oracle数据库升级OPatch全过程

升级完成后:

bash 复制代码
$ opatch version
OPatch Version: 12.2.0.1.41

OPatch succeeded.

安装OJVM补丁

详见MOS 文档:Oracle Recommended Patches -- "Oracle JavaVM Component Database PSU and Update" (OJVM PSU and OJVM Update) Patches (Doc ID 1929745.1)

实际下载是从MOS文档:Primary Note for Database Proactive Patch Program (Doc ID 888.1)

然后搜索OJVM即可。补丁约120M:

bash 复制代码
$ ls -l /vagrant/p35926646_190000_Linux-x86-64.zip
-rwxrwxrwx. 1 vagrant vagrant 127451050 Feb  5 14:21 /vagrant/p35926646_190000_Linux-x86-64.zip

升级文档参见Patch 35926646 - Oracle JavaVM Component Release Update 19.22.0.0.240116

bash 复制代码
PATCHDIR=/home/oracle/patchdir
mkdir $PATCHDIR
unzip -d $PATCHDIR /vagrant/p35926646_190000_Linux-x86-64.zip
cd $PATCHDIR/35926646 
opatch prereq CheckConflictAgainstOHWithDetail -ph ./ 
# 如果上面的先决条件检测通过,则可以安装补丁
opatch apply

安装过程如下:

bash 复制代码
[oracle@oracle-19c-vagrant 35926646]$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 12.2.0.1.41
Copyright (c) 2024, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.41
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-02-05_14-25-44PM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.
[oracle@oracle-19c-vagrant 35926646]$ opatch apply
Oracle Interim Patch Installer version 12.2.0.1.41
Copyright (c) 2024, Oracle Corporation.  All rights reserved.


Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.41
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-02-05_14-26-37PM_1.log

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   35926646

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 = '/opt/oracle/product/19c/dbhome_1')


Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '35926646' to OH '/opt/oracle/product/19c/dbhome_1'

Patching component oracle.javavm.server, 19.0.0.0.0...

Patching component oracle.javavm.server.core, 19.0.0.0.0...

Patching component oracle.rdbms.dbscripts, 19.0.0.0.0...

Patching component oracle.rdbms, 19.0.0.0.0...

Patching component oracle.javavm.client, 19.0.0.0.0...
Patch 35926646 successfully applied.
Log file location: /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-02-05_14-26-37PM_1.log

OPatch succeeded.

还有一些后续工作:

sql 复制代码
connect / as sysdba
startup
alter pluggable database all open;
quit

执行安装后脚本,datapatch 是一款新工具,可实现 RDBMS 补丁的补丁后 SQL 操作自动化:

sql 复制代码
cd $ORACLE_HOME/OPatch
./datapatch -verbose

如果都正常,则执行以下脚本:

sql 复制代码
cd $ORACLE_HOME/rdbms/admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> @utlrp.sql

然后关闭数据库。

sql 复制代码
shutdown immediate

这个补丁安装的时间有点长。如果是新库,最好是打完补丁再建库,而非建完库再打补丁。

安装数据库补丁

因为我没有GI,所以仅升级数据库就好。

补丁约1.8G:

bash 复制代码
$ ls -l /vagrant/p35943157_190000_Linux-x86-64.zip
-rwxrwxrwx. 1 vagrant vagrant 1817908992 Feb  5 13:29 /vagrant/p35943157_190000_Linux-x86-64.zip

解压:

bash 复制代码
PATCHDIR=/home/oracle/patchdir
# 解压完大约3.6G
unzip -qd $PATCHDIR /vagrant/p35943157_190000_Linux-x86-64.zip
cd $PATCHDIR/35943157
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
# 如果上面的先决条件检测通过,则可以安装补丁
opatch apply

先决条件检查确实通过了:

bash 复制代码
$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 12.2.0.1.41
Copyright (c) 2024, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.41
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-02-05_15-10-48PM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

但第一次安装却失败了,因为空间不够:

bash 复制代码
[oracle@oracle-19c-vagrant 35943157]$ time opatch apply
Oracle Interim Patch Installer version 12.2.0.1.41
Copyright (c) 2024, Oracle Corporation.  All rights reserved.


Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.41
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-02-05_15-12-31PM_1.log

Verifying environment and performing prerequisite checks...
Prerequisite check "CheckSystemSpace" failed.
The details are:
Required amount of space(7550.384MB) is not available.
UtilSession failed:
Prerequisite check "CheckSystemSpace" failed.
Log file location: /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-02-05_15-12-31PM_1.log

OPatch failed with error code 73

空间问题处理完后,再次安装:

bash 复制代码
$ time opatch apply
Oracle Interim Patch Installer version 12.2.0.1.41
Copyright (c) 2024, Oracle Corporation.  All rights reserved.


Oracle Home       : /opt/oracle/product/19c/dbhome_1
Central Inventory : /opt/oracle/oraInventory
   from           : /opt/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.41
OUI version       : 12.2.0.7.0
Log file location : /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-02-05_15-41-25PM_1.log

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   35943157

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 = '/opt/oracle/product/19c/dbhome_1')


Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '35943157' to OH '/opt/oracle/product/19c/dbhome_1'
ApplySession: Optional component(s) [ oracle.network.gsm, 19.0.0.0.0 ] , [ oracle.crypto.rsf, 19.0.0.0.0 ] , [ oracle.pg4mq, 19.0.0.0.0 ] , [ oracle.precomp.companion, 19.0.0.0.0 ] , [ oracle.rdbms.ic, 19.0.0.0.0 ] , [ oracle.rdbms.tg4db2, 19.0.0.0.0 ] , [ oracle.tfa, 19.0.0.0.0 ] , [ oracle.rdbms.tg4tera, 19.0.0.0.0 ] , [ oracle.network.cman, 19.0.0.0.0 ] , [ oracle.options.olap, 19.0.0.0.0 ] , [ oracle.oid.client, 19.0.0.0.0 ] , [ oracle.xdk.companion, 19.0.0.0.0 ] , [ oracle.options.olap.api, 19.0.0.0.0 ] , [ oracle.rdbms.tg4ifmx, 19.0.0.0.0 ] , [ oracle.rdbms.tg4sybs, 19.0.0.0.0 ] , [ oracle.rdbms.tg4msql, 19.0.0.0.0 ] , [ oracle.ons.eons.bwcompat, 19.0.0.0.0 ] , [ oracle.ons.cclient, 19.0.0.0.0 ] , [ oracle.sdo.companion, 19.0.0.0.0 ] , [ oracle.net.cman, 19.0.0.0.0 ] , [ oracle.pg4appc, 19.0.0.0.0 ] , [ oracle.jdk, 1.8.0.191.0 ]  not present in the Oracle Home or a higher version is found.



Patching component oracle.rdbms, 19.0.0.0.0...

Patching component oracle.rdbms.util, 19.0.0.0.0...

Patching component oracle.rdbms.rsf, 19.0.0.0.0...

Patching component oracle.assistants.acf, 19.0.0.0.0...

Patching component oracle.assistants.deconfig, 19.0.0.0.0...

Patching component oracle.assistants.server, 19.0.0.0.0...

Patching component oracle.blaslapack, 19.0.0.0.0...

Patching component oracle.buildtools.rsf, 19.0.0.0.0...

Patching component oracle.ctx, 19.0.0.0.0...

Patching component oracle.dbdev, 19.0.0.0.0...

Patching component oracle.dbjava.ic, 19.0.0.0.0...

Patching component oracle.dbjava.jdbc, 19.0.0.0.0...

Patching component oracle.dbjava.ucp, 19.0.0.0.0...

Patching component oracle.duma, 19.0.0.0.0...

Patching component oracle.javavm.client, 19.0.0.0.0...

Patching component oracle.ldap.owm, 19.0.0.0.0...

Patching component oracle.ldap.rsf, 19.0.0.0.0...

Patching component oracle.ldap.security.osdt, 19.0.0.0.0...

Patching component oracle.marvel, 19.0.0.0.0...

Patching component oracle.network.rsf, 19.0.0.0.0...

Patching component oracle.odbc.ic, 19.0.0.0.0...

Patching component oracle.ons, 19.0.0.0.0...

Patching component oracle.ons.ic, 19.0.0.0.0...

Patching component oracle.oracore.rsf, 19.0.0.0.0...

Patching component oracle.perlint, 5.28.1.0.0...

Patching component oracle.precomp.common.core, 19.0.0.0.0...

Patching component oracle.precomp.rsf, 19.0.0.0.0...

Patching component oracle.rdbms.crs, 19.0.0.0.0...

Patching component oracle.rdbms.dbscripts, 19.0.0.0.0...

Patching component oracle.rdbms.deconfig, 19.0.0.0.0...

Patching component oracle.rdbms.oci, 19.0.0.0.0...

Patching component oracle.rdbms.rsf.ic, 19.0.0.0.0...

Patching component oracle.rdbms.scheduler, 19.0.0.0.0...

Patching component oracle.rhp.db, 19.0.0.0.0...

Patching component oracle.sdo, 19.0.0.0.0...

Patching component oracle.sdo.locator.jrf, 19.0.0.0.0...

Patching component oracle.sqlplus, 19.0.0.0.0...

Patching component oracle.sqlplus.ic, 19.0.0.0.0...

Patching component oracle.wwg.plsql, 19.0.0.0.0...

Patching component oracle.xdk.rsf, 19.0.0.0.0...

Patching component oracle.install.deinstalltool, 19.0.0.0.0...

Patching component oracle.sdo.locator, 19.0.0.0.0...

Patching component oracle.rdbms.install.plugins, 19.0.0.0.0...

Patching component oracle.dbtoolslistener, 19.0.0.0.0...

Patching component oracle.xdk, 19.0.0.0.0...

Patching component oracle.rdbms.drdaas, 19.0.0.0.0...

Patching component oracle.xdk.xquery, 19.0.0.0.0...

Patching component oracle.rdbms.rman, 19.0.0.0.0...

Patching component oracle.network.client, 19.0.0.0.0...

Patching component oracle.rdbms.hs_common, 19.0.0.0.0...

Patching component oracle.nlsrtl.rsf.lbuilder, 19.0.0.0.0...

Patching component oracle.oraolap.dbscripts, 19.0.0.0.0...

Patching component oracle.mgw.common, 19.0.0.0.0...

Patching component oracle.rdbms.dv, 19.0.0.0.0...

Patching component oracle.ldap.ssl, 19.0.0.0.0...

Patching component oracle.xdk.parser.java, 19.0.0.0.0...

Patching component oracle.ctx.rsf, 19.0.0.0.0...

Patching component oracle.rdbms.lbac, 19.0.0.0.0...

Patching component oracle.rdbms.hsodbc, 19.0.0.0.0...

Patching component oracle.ctx.atg, 19.0.0.0.0...

Patching component oracle.oraolap, 19.0.0.0.0...

Patching component oracle.oraolap.api, 19.0.0.0.0...

Patching component oracle.odbc, 19.0.0.0.0...

Patching component oracle.ldap.client, 19.0.0.0.0...

Patching component oracle.nlsrtl.rsf, 19.0.0.0.0...

Patching component oracle.rdbms.install.common, 19.0.0.0.0...

Patching component oracle.ovm, 19.0.0.0.0...

Patching component oracle.network.listener, 19.0.0.0.0...

Patching component oracle.ldap.rsf.ic, 19.0.0.0.0...

Patching component oracle.javavm.server, 19.0.0.0.0...

Patching component oracle.precomp.lang, 19.0.0.0.0...

Patching component oracle.precomp.common, 19.0.0.0.0...

Patching component oracle.jdk, 1.8.0.201.0...
Patch 35943157 successfully applied.
Sub-set patch [29517242] has become inactive due to the application of a super-set patch [35943157].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-02-05_15-41-25PM_1.log

OPatch succeeded.

real    36m32.647s
user    20m16.850s
sys     9m43.814s

成功,耗时半小时。

以上安装是交互式的,中间有两处需要用户输入Y或N。可以指定-silent选项以静默运行。

补丁安装后的操作:

sql 复制代码
connect / as sysdba
startup
alter pluggable database all open;
quit

执行脚本:

sql 复制代码
cd $ORACLE_HOME/OPatch
./datapatch -verbose

输出如下:

bash 复制代码
$ time ./datapatch -verbose
SQL Patching tool version 19.22.0.0.0 Production on Mon Feb  5 21:09:00 2024
Copyright (c) 2012, 2024, Oracle.  All rights reserved.

Log file for this invocation: /opt/oracle/cfgtoollogs/sqlpatch/sqlpatch_5704_2024_02_05_21_09_00/sqlpatch_invocation.log

Connecting to database...OK
Gathering database info...done

Note:  Datapatch will only apply or rollback SQL fixes for PDBs
       that are in an open state, no patches will be applied to closed PDBs.
       Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
       (Doc ID 1585822.1)

Bootstrapping registry and package to current versions...done
Determining current state...done

Current state of interim SQL patches:
Interim patch 35926646 (OJVM RELEASE UPDATE: 19.22.0.0.240116 (35926646)):
  Binary registry: Installed
  PDB CDB$ROOT: Applied successfully on 05-FEB-24 02.55.32.207669 PM
  PDB ORCLPDB1: Applied successfully on 05-FEB-24 02.55.33.974523 PM
  PDB PDB$SEED: Applied successfully on 05-FEB-24 02.55.33.368845 PM

Current state of release update SQL patches:
  Binary registry:
    19.22.0.0.0 Release_Update 240104023954: Installed
  PDB CDB$ROOT:
    Applied 19.3.0.0.0 Release_Update 190410122720 successfully on 11-JAN-24 04.17.24.530288 PM
  PDB ORCLPDB1:
    Applied 19.3.0.0.0 Release_Update 190410122720 successfully on 11-JAN-24 04.24.22.690150 PM
  PDB PDB$SEED:
    Applied 19.3.0.0.0 Release_Update 190410122720 successfully on 11-JAN-24 04.24.22.690150 PM

Adding patches to installation queue and performing prereq checks...done
Installation queue:
  For the following PDBs: CDB$ROOT PDB$SEED ORCLPDB1
    No interim patches need to be rolled back
    Patch 35943157 (Database Release Update : 19.22.0.0.240116 (35943157)):
      Apply from 19.3.0.0.0 Release_Update 190410122720 to 19.22.0.0.0 Release_Update 240104023954
    No interim patches need to be applied

Installing patches...
Patch installation complete.  Total patches installed: 3

Validating logfiles...done
Patch 35943157 apply (pdb CDB$ROOT): SUCCESS
  logfile: /opt/oracle/cfgtoollogs/sqlpatch/35943157/25527362/35943157_apply_ORCLCDB_CDBROOT_2024Feb05_21_09_27.log (no errors)
Patch 35943157 apply (pdb PDB$SEED): SUCCESS
  logfile: /opt/oracle/cfgtoollogs/sqlpatch/35943157/25527362/35943157_apply_ORCLCDB_PDBSEED_2024Feb05_21_16_01.log (no errors)
Patch 35943157 apply (pdb ORCLPDB1): SUCCESS
  logfile: /opt/oracle/cfgtoollogs/sqlpatch/35943157/25527362/35943157_apply_ORCLCDB_ORCLPDB1_2024Feb05_21_16_01.log (no errors)
SQL Patching tool complete on Mon Feb  5 21:27:20 2024

real    18m19.684s
user    0m33.220s
sys     0m3.595s

这里有一个小插曲,第一次执行datapatch 时非常慢,我强行中断了。

然后回家又做了一遍,这次快些了,只用了18分钟。

执行datapatch时,解压的数据库补丁我已经删除了,说明其不需要了。

其他

RMAN catalog如果有,也需要升级。我没有,此处略。

还有一些可能需要升级的,详见文档。

验证升级成功

sql 复制代码
SQL> select banner_full from v$version;

BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.22.0.0.0


SQL> select banner_legacy from v$version;

BANNER_LEGACY
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

清理

bash 复制代码
# 删除备份的Oracle Home
rm ~/backup/oracle_home_bkup.tar
# 删除解压的补丁包
PATCHDIR=/home/oracle/patchdir
rm -fr $PATCHDIR
相关推荐
王小小鸭2 小时前
【开发小技巧11】用经典报表实现badge list效果,根据回显内容用颜色加以区分
oracle·oracle apex
大白要努力!2 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Mephisto.java5 小时前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
远歌已逝8 小时前
维护在线重做日志(二)
数据库·oracle
LKID体16 小时前
Python操作neo4j库py2neo使用(一)
python·oracle·neo4j
斗-匕17 小时前
Spring事务管理
数据库·spring·oracle
一行玩python18 小时前
SQLAlchemy,ORM的Python标杆!
开发语言·数据库·python·oracle
王ASC19 小时前
ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值。ojdbc8版本23.2.0.0驱动BUG【已解决】
数据库·sql·oracle
不爱学习的啊Biao20 小时前
初识mysql数据库
数据库·mysql·oracle
SRC_BLUE_1721 小时前
SQLI LABS | Less-55 GET-Challenge-Union-14 Queries Allowed-Variation 2
oracle·c#·less