本文章的思路来源于官方文档:Oracle® 数据库补丁35943157 — 数据库版本更新 19.22.0.0.240116,有错误的地方欢迎指正!
1.环境
系统:RedHat 7.9
版本:单节点 19c 19.3.0
2.OPATCH配置
查阅19.22补丁的Oracle® 数据库补丁35943157 — 数据库版本更新 19.22.0.0.240116可以知道,opatch的版本是需要12.2.0.1.40及以上的,所以这个一定要注意:
1)解压Opatch压缩包到$ORACLE_HOME
我将补丁包等都放在了/soft目录下
静默解压
su - root
su - oracle -c "unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /u01/app/oracle/product/19.3.0/db"
然后我们切换到oracle用户执行命令查看是否成功:
su - oracle
opatch version
这里OPATCH就OK了
3.解压19.22的补丁
这里也是将19c 19.22补丁解压在了/soft目录下
su - oracle -c "unzip -q /soft/p35943157_190000_Linux-x86-64.zip -d /soft"
4.打补丁之前的准备
在进行补丁安装之前我们需要关闭数据库实例以及监听:
1)关闭数据库
su - oracle
sas
shutdown immediate
exit
LOG
[root@p19c soft]# su - oracle
上一次登录:四 3月 21 19:24:29 CST 2024pts/0 上
[oracle@p19c:/home/oracle]$ sas
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 21 19:25:53 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
2)关闭监听
lsnrctl stop
lsnrctl status
LOG
[oracle@p19c:/home/oracle]$ lsnrctl stop
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 21-MAR-2024 19:31:42
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully
[oracle@p19c:/home/oracle]$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 21-MAR-2024 19:31:47
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
3)预检查
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
[oracle@p19c:/soft/35943157]$ pwd
/soft/35943157
[oracle@p19c:/soft/35943157]$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle 临时补丁程序安装程序版本 12.2.0.1.41
版权所有 (c) 2024, Oracle Corporation。保留所有权利。
PREREQ session
Oracle 主目录 :/u01/app/oracle/product/19.3.0/db
主产品清单:/u01/app/oraInventory
来自 :/u01/app/oracle/product/19.3.0/db/oraInst.loc
OPatch 版本 :12.2.0.1.41
OUI 版本 :12.2.0.7.0
日志文件位置:/u01/app/oracle/product/19.3.0/db/cfgtoollogs/opatch/opatch2024-03-21_19-45-21下午_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
提示OPatch succeeded!至此就OK了。
5.开始打补丁
cd /soft/35943157 #切换目录
opatch apply #开始打补丁
LOG
Oracle 临时补丁程序安装程序版本 12.2.0.1.41
版权所有 (c) 2024, Oracle Corporation。保留所有权利。
Oracle 主目录 :/u01/app/oracle/product/19.3.0/db
主产品清单:/u01/app/oraInventory
来自 :/u01/app/oracle/product/19.3.0/db/oraInst.loc
OPatch 版本 :12.2.0.1.41
OUI 版本 :12.2.0.7.0
日志文件位置:/u01/app/oracle/product/19.3.0/db/cfgtoollogs/opatch/opatch2024-03-21_19-47-19下午_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 35943157
是否继续? [y|n]
y
User Responded with: Y
All checks passed.
请关闭本地系统上在此 ORACLE_HOME 之外运行的 Oracle 实例。
(Oracle 主目录 = '/u01/app/oracle/product/19.3.0/db')
本地系统是否已准备打补丁? [y|n]
y
User Responded with: Y
Backing up files...
正在将临时补丁程序 '35943157' 应用于 OH '/u01/app/oracle/product/19.3.0/db'
ApplySession: Oracle 主目录中不存在可选组件 [ 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 ] , 或找到更高版本。
正在为组件 oracle.rdbms, 19.0.0.0.0 打补丁...
正在为组件 oracle.rdbms.util, 19.0.0.0.0 打补丁...
正在为组件 oracle.rdbms.rsf, 19.0.0.0.0 打补丁...
正在为组件 oracle.assistants.acf, 19.0.0.0.0 打补丁...
正在为组件 oracle.assistants.deconfig, 19.0.0.0.0 打补丁...
正在为组件 oracle.assistants.server, 19.0.0.0.0 打补丁...
正在为组件 oracle.blaslapack, 19.0.0.0.0 打补丁...
.......
正在为组件 oracle.precomp.common, 19.0.0.0.0 打补丁...
正在为组件 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: /u01/app/oracle/product/19.3.0/db/cfgtoollogs/opatch/opatch2024-03-21_19-47-19下午_1.log
OPatch succeeded.
6.检查补丁的信息
opatch lspatches
LOG:因为我们是单例的,OCW是集群管理的,所以在这篇文章就不做功课了
[oracle@p19c:/soft/35943157]$ opatch lspatches
35943157;Database Release Update : 19.22.0.0.240116 (35943157)
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
OPatch succeeded.
7.启动数据库
1)启动监听:
lsnrctl start
lsnrctl status
[oracle@p19c:/soft/35943157]$ lsnrctl start
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 21-MAR-2024 20:07:47
Copyright (c) 1991, 2023, Oracle. All rights reserved.
Starting /u01/app/oracle/product/19.3.0/db/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Log messages written to /u01/app/oracle/diag/tnslsnr/p19c/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=p19c)(PORT=1521)))
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 21-MAR-2024 20:07:47
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /u01/app/oracle/diag/tnslsnr/p19c/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=p19c)(PORT=1521)))
The listener supports no services
The command completed successfully
2)启动数据库:
su - oracle
sas
startup
可以看到我们的数据库版本已经由原来的19.3到现在的19.22了:
[oracle@p19c:/soft/35943157]$ sas
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 21 20:07:56 2024
Version 19.22.0.0.0
Copyright (c) 1982, 2023, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 4194300776 bytes
Fixed Size 9188200 bytes
Variable Size 822083584 bytes
Database Buffers 3355443200 bytes
Redo Buffers 7585792 bytes
Database mounted.
Database opened.
SQL>
8.查看状态
#查看数据库进程
ps -ef|grep ora
[oracle@p19c:/soft/35943157]$ ps -ef|grep ora
root 5336 3178 0 19:25 pts/0 00:00:00 su - oracle
oracle 5337 5336 0 19:25 pts/0 00:00:00 -bash
oracle 10930 1 0 20:07 ? 00:00:00 /u01/app/oracle/product/19.3.0/db/bin/tnslsnr LISTENER -inherit
oracle 10956 1 0 20:08 ? 00:00:00 ora_pmon_p19c
oracle 10960 1 0 20:08 ? 00:00:00 ora_clmn_p19c
oracle 10964 1 0 20:08 ? 00:00:00 ora_psp0_p19c
oracle 10969 1 2 20:08 ? 00:00:04 ora_vktm_p19c
oracle 10975 1 0 20:08 ? 00:00:00 ora_gen0_p19c
oracle 10979 1 0 20:08 ? 00:00:00 ora_mman_p19c
oracle 10985 1 0 20:08 ? 00:00:00 ora_gen1_p19c
oracle 10988 1 0 20:08 ? 00:00:00 ora_diag_p19c
oracle 10990 1 0 20:08 ? 00:00:00 ora_ofsd_p19c
oracle 10993 1 0 20:08 ? 00:00:00 ora_dbrm_p19c
oracle 10997 1 0 20:08 ? 00:00:00 ora_vkrm_p19c
oracle 10999 1 0 20:08 ? 00:00:00 ora_svcb_p19c
oracle 11001 1 0 20:08 ? 00:00:00 ora_pman_p19c
oracle 11005 1 0 20:08 ? 00:00:00 ora_dia0_p19c
oracle 11007 1 0 20:08 ? 00:00:00 ora_dbw0_p19c
oracle 11011 1 0 20:08 ? 00:00:00 ora_lgwr_p19c
oracle 11015 1 0 20:08 ? 00:00:00 ora_ckpt_p19c
oracle 11019 1 0 20:08 ? 00:00:00 ora_lg00_p19c
oracle 11021 1 0 20:08 ? 00:00:00 ora_smon_p19c
oracle 11025 1 0 20:08 ? 00:00:00 ora_lg01_p19c
oracle 11027 1 0 20:08 ? 00:00:00 ora_smco_p19c
oracle 11029 1 0 20:08 ? 00:00:00 ora_reco_p19c
oracle 11031 1 0 20:08 ? 00:00:00 ora_w000_p19c
oracle 11033 1 0 20:08 ? 00:00:00 ora_lreg_p19c
oracle 11037 1 0 20:08 ? 00:00:00 ora_w001_p19c
oracle 11039 1 0 20:08 ? 00:00:00 ora_pxmn_p19c
oracle 11046 1 0 20:08 ? 00:00:01 ora_mmon_p19c
oracle 11048 1 0 20:08 ? 00:00:00 ora_mmnl_p19c
oracle 11050 1 0 20:08 ? 00:00:00 ora_d000_p19c
oracle 11052 1 0 20:08 ? 00:00:00 ora_s000_p19c
oracle 11054 1 0 20:08 ? 00:00:00 ora_tmon_p19c
oracle 11059 1 0 20:08 ? 00:00:00 ora_m000_p19c
oracle 11061 1 0 20:08 ? 00:00:00 ora_m001_p19c
oracle 11067 1 0 20:08 ? 00:00:00 ora_tt00_p19c
oracle 11069 1 0 20:08 ? 00:00:00 ora_tt01_p19c
oracle 11071 1 0 20:08 ? 00:00:00 ora_tt02_p19c
oracle 11076 1 0 20:08 ? 00:00:00 ora_w002_p19c
oracle 11078 1 0 20:08 ? 00:00:00 ora_aqpc_p19c
oracle 11083 1 0 20:08 ? 00:00:00 ora_p000_p19c
oracle 11085 1 0 20:08 ? 00:00:00 ora_p001_p19c
oracle 11087 1 0 20:08 ? 00:00:00 ora_p002_p19c
oracle 11089 1 0 20:08 ? 00:00:00 ora_p003_p19c
oracle 11091 1 0 20:08 ? 00:00:00 ora_p004_p19c
oracle 11093 1 0 20:08 ? 00:00:00 ora_p005_p19c
oracle 11095 1 0 20:08 ? 00:00:00 ora_p006_p19c
oracle 11097 1 0 20:08 ? 00:00:00 ora_p007_p19c
oracle 11099 1 0 20:08 ? 00:00:00 ora_p008_p19c
oracle 11101 1 0 20:08 ? 00:00:00 ora_p009_p19c
oracle 11103 1 0 20:08 ? 00:00:00 ora_p00a_p19c
oracle 11105 1 0 20:08 ? 00:00:00 ora_p00b_p19c
oracle 11107 1 0 20:08 ? 00:00:00 ora_cjq0_p19c
oracle 11305 1 0 20:08 ? 00:00:00 ora_w003_p19c
oracle 11311 1 0 20:08 ? 00:00:00 ora_w004_p19c
oracle 11325 1 0 20:08 ? 00:00:00 ora_m002_p19c
oracle 11349 1 0 20:08 ? 00:00:00 ora_m003_p19c
oracle 11353 1 0 20:08 ? 00:00:00 ora_qm02_p19c
oracle 11357 1 0 20:08 ? 00:00:00 ora_q002_p19c
oracle 11359 1 0 20:08 ? 00:00:00 ora_q003_p19c
oracle 11410 1 0 20:09 ? 00:00:00 ora_cl00_p19c
oracle 11412 1 0 20:09 ? 00:00:00 ora_cl01_p19c
oracle 11414 1 0 20:09 ? 00:00:00 ora_cl02_p19c
oracle 11416 1 0 20:09 ? 00:00:00 ora_cl03_p19c
oracle 11418 1 0 20:09 ? 00:00:00 ora_cl04_p19c
oracle 11587 5337 0 20:11 pts/0 00:00:00 ps -ef
oracle 11588 5337 0 20:11 pts/0 00:00:00 grep --color=auto ora
9.将修改的负载 SQL 文件传到数据库中(非必须)
在查阅升级19.22的官方文档后,在补丁升级之后还需要将修改的负载 SQL 文件传到数据库中,因为我们是单节点ORACLE数据库,所以属于非CDB数据库:
1)查看数据库状态:
#先确保我们的数据库已经启动
ps -ef|grep ora
[oracle@p19c:/soft/35943157]$ ps -ef|grep ora
root 5336 3178 0 19:25 pts/0 00:00:00 su - oracle
oracle 5337 5336 0 19:25 pts/0 00:00:00 -bash
oracle 10930 1 0 20:07 ? 00:00:00 /u01/app/oracle/product/19.3.0/db/bin/tnslsnr LISTENER -inherit
oracle 10956 1 0 20:08 ? 00:00:00 ora_pmon_p19c
oracle 10960 1 0 20:08 ? 00:00:00 ora_clmn_p19c
oracle 10964 1 0 20:08 ? 00:00:00 ora_psp0_p19c
oracle 10969 1 2 20:08 ? 00:00:04 ora_vktm_p19c
oracle 10975 1 0 20:08 ? 00:00:00 ora_gen0_p19c
oracle 10979 1 0 20:08 ? 00:00:00 ora_mman_p19c
oracle 10985 1 0 20:08 ? 00:00:00 ora_gen1_p19c
oracle 10988 1 0 20:08 ? 00:00:00 ora_diag_p19c
oracle 10990 1 0 20:08 ? 00:00:00 ora_ofsd_p19c
oracle 10993 1 0 20:08 ? 00:00:00 ora_dbrm_p19c
oracle 10997 1 0 20:08 ? 00:00:00 ora_vkrm_p19c
oracle 10999 1 0 20:08 ? 00:00:00 ora_svcb_p19c
oracle 11001 1 0 20:08 ? 00:00:00 ora_pman_p19c
oracle 11005 1 0 20:08 ? 00:00:00 ora_dia0_p19c
oracle 11007 1 0 20:08 ? 00:00:00 ora_dbw0_p19c
oracle 11011 1 0 20:08 ? 00:00:00 ora_lgwr_p19c
oracle 11015 1 0 20:08 ? 00:00:00 ora_ckpt_p19c
oracle 11019 1 0 20:08 ? 00:00:00 ora_lg00_p19c
oracle 11021 1 0 20:08 ? 00:00:00 ora_smon_p19c
oracle 11025 1 0 20:08 ? 00:00:00 ora_lg01_p19c
oracle 11027 1 0 20:08 ? 00:00:00 ora_smco_p19c
oracle 11029 1 0 20:08 ? 00:00:00 ora_reco_p19c
oracle 11031 1 0 20:08 ? 00:00:00 ora_w000_p19c
oracle 11033 1 0 20:08 ? 00:00:00 ora_lreg_p19c
oracle 11037 1 0 20:08 ? 00:00:00 ora_w001_p19c
oracle 11039 1 0 20:08 ? 00:00:00 ora_pxmn_p19c
oracle 11046 1 0 20:08 ? 00:00:01 ora_mmon_p19c
oracle 11048 1 0 20:08 ? 00:00:00 ora_mmnl_p19c
oracle 11050 1 0 20:08 ? 00:00:00 ora_d000_p19c
oracle 11052 1 0 20:08 ? 00:00:00 ora_s000_p19c
oracle 11054 1 0 20:08 ? 00:00:00 ora_tmon_p19c
oracle 11059 1 0 20:08 ? 00:00:00 ora_m000_p19c
oracle 11061 1 0 20:08 ? 00:00:00 ora_m001_p19c
oracle 11067 1 0 20:08 ? 00:00:00 ora_tt00_p19c
oracle 11069 1 0 20:08 ? 00:00:00 ora_tt01_p19c
oracle 11071 1 0 20:08 ? 00:00:00 ora_tt02_p19c
oracle 11076 1 0 20:08 ? 00:00:00 ora_w002_p19c
oracle 11078 1 0 20:08 ? 00:00:00 ora_aqpc_p19c
oracle 11083 1 0 20:08 ? 00:00:00 ora_p000_p19c
oracle 11085 1 0 20:08 ? 00:00:00 ora_p001_p19c
oracle 11087 1 0 20:08 ? 00:00:00 ora_p002_p19c
oracle 11089 1 0 20:08 ? 00:00:00 ora_p003_p19c
oracle 11091 1 0 20:08 ? 00:00:00 ora_p004_p19c
oracle 11093 1 0 20:08 ? 00:00:00 ora_p005_p19c
oracle 11095 1 0 20:08 ? 00:00:00 ora_p006_p19c
oracle 11097 1 0 20:08 ? 00:00:00 ora_p007_p19c
oracle 11099 1 0 20:08 ? 00:00:00 ora_p008_p19c
oracle 11101 1 0 20:08 ? 00:00:00 ora_p009_p19c
oracle 11103 1 0 20:08 ? 00:00:00 ora_p00a_p19c
oracle 11105 1 0 20:08 ? 00:00:00 ora_p00b_p19c
oracle 11107 1 0 20:08 ? 00:00:00 ora_cjq0_p19c
oracle 11305 1 0 20:08 ? 00:00:00 ora_w003_p19c
oracle 11311 1 0 20:08 ? 00:00:00 ora_w004_p19c
oracle 11325 1 0 20:08 ? 00:00:00 ora_m002_p19c
oracle 11349 1 0 20:08 ? 00:00:00 ora_m003_p19c
oracle 11353 1 0 20:08 ? 00:00:00 ora_qm02_p19c
oracle 11357 1 0 20:08 ? 00:00:00 ora_q002_p19c
oracle 11359 1 0 20:08 ? 00:00:00 ora_q003_p19c
oracle 11410 1 0 20:09 ? 00:00:00 ora_cl00_p19c
oracle 11412 1 0 20:09 ? 00:00:00 ora_cl01_p19c
oracle 11414 1 0 20:09 ? 00:00:00 ora_cl02_p19c
oracle 11416 1 0 20:09 ? 00:00:00 ora_cl03_p19c
oracle 11418 1 0 20:09 ? 00:00:00 ora_cl04_p19c
oracle 11587 5337 0 20:11 pts/0 00:00:00 ps -ef
oracle 11588 5337 0 20:11 pts/0 00:00:00 grep --color=auto ora
2)开始操作
#进入到OPATCH的目录
cd $ORACLE_HOME/OPatch
#这个是可选择的
./datapatch -sanity_checks
#执行,这一步的时间有点长,稍微等一等就OK了
./datapatch -verbose
LOG
[oracle@p19c:/u01/app/oracle/product/19.3.0/db/OPatch]$ ./datapatch -sanity_checks
Wide character in print at /u01/app/oracle/product/19.3.0/db/sqlpatch/sqlpatch_sanity_checks.pm line 395.
SQL Patching sanity checks version 19.22.0.0.0 on 2024年03月21日 星期四 20时29分59秒
Wide character in print at /u01/app/oracle/product/19.3.0/db/sqlpatch/sqlpatch_sanity_checks.pm line 404.
Wide character in print at /u01/app/oracle/product/19.3.0/db/sqlpatch/sqlpatch_sanity_checks.pm line 412.
Copyright (c) 2021, 2024, Oracle. All rights reserved.
Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20240321_202959_3649/sanity_checks_20240321_202959_3649.log
Running checks
JSON report generated in /u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20240321_202959_3649/sqlpatch_sanity_checks_summary.json file
Checks completed. Printing report:
Check: Database component status - OK
Check: PDB Violations - OK
Check: Invalid System Objects - OK
Check: Tablespace Status - OK
Check: Backup jobs - OK
Check: Temp file exists - OK
Check: Temp file online - OK
Check: Data Pump running - OK
Check: Container status - WARNING
Datapatch will only run in containers with READ WRITE, MIGRATE (upgrade) or READ ONLY mode.
Specified containers are not READ WRITE, MIGRATE or READ ONLY mode. When not opened, containers will not be a part of patching.
Open containers if they should take part of patching activities. Refer to the section "Modifying a PDB with the ALTER PLUGGABLE DATABASE Statement" in the Multitenant Administrator's Guide for details.
CDB$ROOT:
| NAME | OPEN_MODE |
|------+-----------|
| PDB | MOUNTED |
|------+-----------|
Check: Oracle Database Keystore - OK
Check: Dictionary statistics gathering - WARNING
Patching the database while dictionary statistics are being collected may lead to performance issues.
Dictionary statistics are currently being collected in the database.
Consider patching the database when dictionary statistics are not being collected. To check if such operations are currently running, run this query:
SELECT sofar, totalwork, units, start_time, time_remaining, message
FROM sys.v$session_longops
WHERE opname = 'Gather Dictionary Schema Statistics'
AND time_remaining > 0;
PDB$SEED:
| LATEST | OPERATION |
|-----------------+-------------------------|
| 17-APR-19 02:03 | gather_dictionary_stats |
|-----------------+-------------------------|
Check: Scheduled Jobs - OK
Check: GoldenGate triggers - OK
Check: Logminer DDL triggers - OK
Check: Check sys public grants - OK
Check: Statistics gathering running - OK
Check: Optim dictionary upgrade parameter - OK
Check: Symlinks on oracle home path - OK
Check: Central Inventory - OK
Check: Queryable Inventory dba directories - OK
Check: Queryable Inventory locks - OK
Check: Queryable Inventory package - ERROR
Datapatch uses Queryable Inventory to get OPatch Inventory information and create a patching installation plan.
The Queryable Inventory package is not able to retrieve OPatch Inventory information.
Refer to MOS Note 1602089.1 for details on verifying the Queryable Inventory package before patching.
CDB$ROOT:
| RESULT |
|---------|
| Failure |
|---------|
Check: Queryable Inventory external table - SKIPPED (ERROR)
Message: Skipped as previous check wasn't executed successfully.
Check: Imperva processes - OK
Check: Guardium processes - OK
Check: Locale - OK
Refer to MOS Note 2680521.1 and debug log
/u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20240321_202959_3649/sanity_checks_debug_20240321_202959_3649.log
Wide character in print at /u01/app/oracle/product/19.3.0/db/sqlpatch/sqlpatch_sanity_checks.pm line 395.
SQL Patching sanity checks completed on 2024年03月21日 星期四 20时30分06秒
Wide character in print at /u01/app/oracle/product/19.3.0/db/sqlpatch/sqlpatch_sanity_checks.pm line 404.
Wide character in print at /u01/app/oracle/product/19.3.0/db/sqlpatch/sqlpatch_sanity_checks.pm line 412.
[oracle@p19c:/u01/app/oracle/product/19.3.0/db/OPatch]$ ./datapatch -verbose
SQL Patching tool version 19.22.0.0.0 Production on Thu Mar 21 20:30:24 2024
Copyright (c) 2012, 2024, Oracle. All rights reserved.
Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_3910_2024_03_21_20_30_24/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)
Warning: PDB PDB is in mode MOUNTED and will be skipped.
Bootstrapping registry and package to current versions...done
Determining current state...done
Current state of interim SQL patches:
No interim patches found
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 21-MAR-24 04.19.41.127359 PM
PDB PDB$SEED:
Applied 19.3.0.0.0 Release_Update 190410122720 successfully on 21-MAR-24 04.25.10.391884 PM
Adding patches to installation queue and performing prereq checks...done
Installation queue:
For the following PDBs: CDB$ROOT PDB$SEED
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: 2
Validating logfiles...done
Patch 35943157 apply (pdb CDB$ROOT): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/35943157/25527362/35943157_apply_P19C_CDBROOT_2024Mar21_20_30_59.log (no errors)
Patch 35943157 apply (pdb PDB$SEED): SUCCESS
logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/35943157/25527362/35943157_apply_P19C_PDBSEED_2024Mar21_20_36_12.log (no errors)
Automatic recompilation incomplete; run utlrp.sql to revalidate.
PDBs: PDB$SEED
SQL Patching tool complete on Thu Mar 21 20:40:04 2024
从中可以看出没有错误:
3)检查日志是否出错
cd /u01/app/oracle/cfgtoollogs/sqlpatch/35943157/25527362
ls
#这个会把操作都给调出来,很多很多,一般前几步不会错,都不会有问题的,不建议操作,可以记事本打开瞅瞅,内容太多我就不列出来了
cat 35943157_apply_P19C_CDBROOT_2024Mar21_20_30_59.log
4)更新 extjob 的权限
数据库版本更新修补程序安装涉及重新链接库和可执行文件待更新。有时会导致权限更改并需要更新。
#以root权限执行以下命令
su - root
#如果你的root用户没有配置ORACLE_HOME的环境变量的话,此时会找不到目录,直接将$ORACLE_HOME替换成实际目录就行了
chown root $ORACLE_HOME/bin/extjob
chmod 4750 $ORACLE_HOME/bin/extjob
#没有配置环境变量执行以下命令
chown root /u01/app/oracle/product/19.3.0/db/bin/extjob
chmod 4750 /u01/app/oracle/product/19.3.0/db/bin/extjob
10.版本回退
1)关闭数据实例和监听程序
查阅官方文档可知,我们要想进行回退必须将监听以及实例关掉
我们把数据库以及监听都关闭之后执行以下命令进行版本回退
opatch rollback -id 35943157
LOG
[oracle@p19c:/home/oracle]$ opatch rollback -id 35943157
Oracle 临时补丁程序安装程序版本 12.2.0.1.41
版权所有 (c) 2024, Oracle Corporation。保留所有权利。
Oracle 主目录 :/u01/app/oracle/product/19.3.0/db
主产品清单:/u01/app/oraInventory
来自 :/u01/app/oracle/product/19.3.0/db/oraInst.loc
OPatch 版本 :12.2.0.1.41
OUI 版本 :12.2.0.7.0
日志文件位置:/u01/app/oracle/product/19.3.0/db/cfgtoollogs/opatch/opatch2024-03-22_16-34-10下午_1.log
Patches will be rolled back in the following order:
35943157
The following patch(es) will be rolled back: 35943157
请关闭本地系统上在此 ORACLE_HOME 之外运行的 Oracle 实例。
(Oracle 主目录 = '/u01/app/oracle/product/19.3.0/db')
本地系统是否已准备打补丁? [y|n]
y
User Responded with: Y
Rolling back patch 35943157...
RollbackSession 从 OH '/u01/app/oracle/product/19.3.0/db' 回退临时补丁程序 '35943157'
正在为组件 oracle.rdbms, 19.0.0.0.0 打补丁...
正在为组件 oracle.rdbms.util, 19.0.0.0.0 打补丁...
正在为组件 oracle.rdbms.rsf, 19.0.0.0.0 打补丁...
正在为组件 oracle.assistants.acf, 19.0.0.0.0 打补丁...
正在为组件 oracle.assistants.deconfig, 19.0.0.0.0 打补丁...
正在为组件 oracle.assistants.server, 19.0.0.0.0 打补丁...
正在为组件 oracle.blaslapack, 19.0.0.0.0 打补丁...
正在为组件 oracle.buildtools.rsf, 19.0.0.0.0 打补丁...
..........
正在为组件 oracle.javavm.server, 19.0.0.0.0 打补丁...
正在为组件 oracle.precomp.lang, 19.0.0.0.0 打补丁...
正在为组件 oracle.precomp.common, 19.0.0.0.0 打补丁...
正在为组件 oracle.jdk, 1.8.0.201.0 打补丁...
RollbackSession 从产品清单中删除临时补丁程序 '35943157'
Inactive sub-set patch [29517242] has become active due to the rolling back of a super-set patch [35943157].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /u01/app/oracle/product/19.3.0/db/cfgtoollogs/opatch/opatch2024-03-22_16-34-10下午_1.log
OPatch succeeded.
2)加载修改 SQL 文件到数据库中
①启动监听并且启动数据库:
lsnrctl start #启动监听
sas
startup #启动数据库
这里我们就可以看到版本已经回退了
②执行命令
治理就不放执行记录了,跟之前的执行过一次的结果是一样的。
#进入到OPATCH的目录
cd $ORACLE_HOME/OPatch
#这个是可选择的
./datapatch -sanity_checks
#执行,这一步的时间有点长,稍微等一等就OK了
./datapatch -verbose
11.结语
至此,从19.3打补丁到19.22以及回退就结束啦!