一同事,在对ORACLE 12.1.0.2 for linux7.6 应用PSU补丁31550110时,遇到了各种巨坑。
首先,在Patch 31550110 apply的过程中,没有任何异常,按照PSU31550110的readme,在apply执行完成后,
无论单纯的单实例还是CDB容器库都需要执行./datapatch -verbose。
但是,在执行./datapatch -verbose时,操作日志提示报错信息如下:
按照datapatch -verbose日志提示,分别在CDB和PDB数据库执行select dbms_sqlpatch.verify_queryable_inventory
from dual;均提示错误信息:
其次,依经验需要排除PSU31550110的影响,处理方法是回退PSU31550110再执行select
dbms_sqlpatch.verify_queryable_inventory from dual;是否有同样的错误信息提示。回退PSU31550110后再执行查询
dbms_sqlpatch.verify_queryable_inventory from dual;,无论是CDB还是PDB依然是KUP-00554 KUP-01005 KUP-01008 KUP-01007的报错信息提示。所以,可以确定KUP-00554 KUP-01005 KUP-01008 KUP-01007问题在PSU31550110应用之前就存在。PSU31550110应用之前,需要先处理KUP-00554 KUP-01005 KUP-01008 KUP-01007
报错问题。
按照KUP-00554 KUP-01005 KUP-01008 KUP-01007在oracle mos查询到文档Doc ID 2302799.1。
Doc ID 2302799.1提示的对应数据库版本与本次操作的数据库版本一致:
Doc ID 2302799.1提示的现象与本次操作的报错信息一致:
Doc ID 2302799.1提示的问题处理方法是重建OPATCH_XML_INV表,重建过程如下:
需要注意的是:OPATCH_XML_INV表重建需要在CDB层次(2302799.1没有特别说明)操作。
再次,重建OPATCH_XML_INV后,重新应用补丁集31550110也是成功的,datapatch -verbose不再有异常提示信息:
oracle$[/app/oracle/product/12.1.0/dbhome_1/OPatch]./datapatch -verbose
SQL Patching tool version 12.1.0.2.0 Production on Mon Oct 25 18:04:27 2021
Copyright (c) 2012, 2016, Oracle. All rights reserved.
Log file for this invocation: /app/oracle/cfgtoollogs/sqlpatch/sqlpatch_28324_2021_10_25_18_04_27/sqlpatch_invocation.log
Connecting to database...OK
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 SQL patches:
Bundle series PSU:
ID 201020 in the binary registry and ID 201020 in PDB CDB$ROOT, ID 201020 in PDB PDB$SEED, ID 201020 in PDB PDBORCL
Adding patches to installation queue and performing prereq checks...
Installation queue:
For the following PDBs: CDB$ROOT
Nothing to roll back
Nothing to apply
For the following PDBs: PDB$SEED PDBORCL
Nothing to roll back
The following patches will be applied:
31550110 (DATABASE PATCH SET UPDATE 12.1.0.2.201020)
Installing patches...
Patch installation complete. Total patches installed: 2
Validating logfiles...
Patch 31550110 apply (pdb PDB$SEED): SUCCESS
logfile: /app/oracle/cfgtoollogs/sqlpatch/31550110/23839756/31550110_apply_ORCL_PDBSEED_2021Oct25_18_04_50.log (no errors)
Patch 31550110 apply (pdb PDBORCL): SUCCESS
logfile: /app/oracle/cfgtoollogs/sqlpatch/31550110/23839756/31550110_apply_ORCL_PDBORCL_2021Oct25_18_04_51.log (no errors)
在CDB层次执行查询select dbms_sqlpatch.verify_queryable_inventory from dual;正常返回结果:
但是,在PDB中执行select dbms_sqlpatch.verify_queryable_inventory from dual;返回错误信息:
关于KUP-00554 KUP-01005 KUP-01008 KUP-01007报错问题,MOS上有另外一篇文档Doc ID 2293336.1有说明:
按照Doc ID 2293336.1文档提示,select dbms_sqlpatch.verify_queryable_inventory from dual;查询只能在CDB层次
执行,PDB层次不支持。
总结:
1. KUP-00554 KUP-01005 KUP-01008 KUP-01007报错问题,CDB中需要重建表OPATCH_XML_INV;
2. PDB中KUP-00554 KUP-01005 KUP-01008 KUP-01007报错问题可忽略