一、報錯
測試庫12.2 DB 啟動,觀察DB Alert存在報錯信息
Completed: ALTER DATABASE OPEN 2021-03-04T22:39:51.795680+08:00 Unable to obtain current patch information due to error: 20001, ORA-20001: Latest xml inventory is not loaded into table ORA-06512: 在 "SYS.DBMS_QOPATCH", line 777 ORA-06512: 在 "SYS.DBMS_QOPATCH", line 864 ORA-06512: 在 "SYS.DBMS_QOPATCH", line 2222 ORA-06512: 在 "SYS.DBMS_QOPATCH", line 740 ORA-06512: 在 "SYS.DBMS_QOPATCH", line 2247 =========================================================== Dumping current patch information =========================================================== Unable to obtain current patch information due to error: 20001 ===========================================================
二、參考學習
12.2:DB Alert.log shows ORA-20001: Latest xml inventory,ORA-06512: at "SYS.DBMS_QOPATCH","KUP-04004: error while reading file" (Doc ID 2323937.1)
https://www.xifenfei.com/2018/01/orainventory-ora-20001.html
三、問題排查
3.1 參考MOS處理,非權限問題
SQL> select * from OPATCH_XML_INV ; ERROR: ORA-29913: error in executing ODCIEXTTABLEFETCH callout ORA-29400: data cartridge error KUP-04004: error while reading file /picclife/app/oracle/product/12.2.0/db_1/QOpatch/qopiprep.bat select xmltransform(dbms_qopatch.get_opatch_lsinventory(), dbms_qopatch.GET_OPATCH_XSLT()) from dual ; ERROR: ORA-20001: Latest xml inventory is not loaded into table ORA-06512: at "SYS.DBMS_QOPATCH", line 777 ORA-06512: at "SYS.DBMS_QOPATCH", line 864 ORA-06512: at "SYS.DBMS_QOPATCH", line 2222 ORA-06512: at "SYS.DBMS_QOPATCH", line 740 ORA-06512: at "SYS.DBMS_QOPATCH", line 2247 datapatch -prereq報錯 $ $ORACLE_HOME/OPatch/datapatch -prereq SQL Patching tool version 12.2.0.1.0 Production on Thu Mar 4 22:49:46 2021 Copyright (c) 2012, 2017, Oracle. All rights reserved. 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) Queryable inventory could not determine the current opatch status. Execute 'select dbms_sqlpatch.verify_queryable_inventory from dual' and/or check the invocation log /picclife/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_8718_2021_03_04_22_49_46/sqlpatch_invocation.log for the complete error. Prereq check failed, exiting without installing any patches. Please refer to MOS Note 1609718.1 and/or the invocation log /picclife/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_8718_2021_03_04_22_49_46/sqlpatch_invocation.log for information on how to resolve the above errors. SQL Patching tool complete on Thu Mar 4 22:49:50 2021
c11:/picclife/app/oracle$ tail -200f /picclife/app/oracle/product/12.2.0/db_1/rdbms/log/qopatch_log.log
LOG file opened at 03/04/21 22:43:13
KUP-05007: Warning: Intra source concurrency disabled because the preprocessor option is being used.
Field Definitions for table OPATCH_XML_INV
Record format DELIMITED BY NEWLINE
Data in file has same endianness as the platform
Reject rows with all null fields
Fields in Data Source:
XML_INVENTORY CHAR (100000000)
Terminated by "UIJSVTBOEIZBEFFQBL"
Trim whitespace same as SQL Loader
KUP-04004: error while reading file /picclife/app/oracle/product/12.2.0/db_1/QOpatch/qopiprep.bat
KUP-04017: OS message: Error 0
KUP-04017: OS message: OPatch cannot find a valid oraInst.loc file to locate Central Inventory.
cat: /picclife/app/oracle/product/12.2.0/db_1/rdbms/log/xml_file_c11.xml: No such file
KUP-04118: operation "pipe read", location "skudmir:2"
$ ls -ld $ORACLE_HOME/rdbms/log
drwxr-xr-x. 2 oracle oinstall 4096 3月 4 22:43 /picclife/app/oracle/product/12.2.0/db_1/rdbms/log
$ chmod 775 /picclife/app/oracle/product/12.2.0/db_1/rdbms/log
3.2 問題定位
OPatch 找不到有效的 oraInst.loc 文件來定位主產品清單。
c11:/picclife/app/oracle/product/12.2.0/db_1/OPatch$ ./opatch lsinventory Oracle 中間補丁程序安裝程序版本 12.2.0.1.6 版權所有 (c) 2021, Oracle Corporation。保留所有權利。 Oracle Home : /picclife/app/oracle/product/12.2.0/db_1 Central Inventory : n/a from : /picclife/app/oracle/product/12.2.0/db_1/oraInst.loc OPatch version : 12.2.0.1.6 OUI version : 12.2.0.1.4 Log file location : /picclife/app/oracle/product/12.2.0/db_1/cfgtoollogs/opatch/opatch2021-03-04_22-52-09下午_1.log OPatch 找不到有效的 oraInst.loc 文件來定位主產品清單。 OPatch failed with error code 104
查詢日志
# cat /picclife/app/oracle/product/12.2.0/db_1/cfgtoollogs/opatch/opatch2021-03-04_22-52-09下午_1.log [2021-3-4 22:52:09] OUI exists, the oraclehome is OUI based. [2021-3-4 22:52:09] OUI exists, the oraclehome is OUI based. [2021-3-4 22:52:09] OPatch invoked as follows: 'lsinventory -invPtrLoc /picclife/app/oracle/product/12.2.0/db_1/oraInst.loc ' [2021-3-4 22:52:09] OUI-67077: Oracle 主目錄 : /picclife/app/oracle/product/12.2.0/db_1 主產品清單: n/a 從 : /picclife/app/oracle/product/12.2.0/db_1/oraInst.loc OPatch 版本 : 12.2.0.1.6 OUI 版本 : 12.2.0.1.4 OUI 位置 : /picclife/app/oracle/product/12.2.0/db_1/oui 日志文件位置 : /picclife/app/oracle/product/12.2.0/db_1/cfgtoollogs/opatch/opatch2021-03-04_22-52-09下午_1.log [2021-3-4 22:52:09] Patch history file: /picclife/app/oracle/product/12.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt [2021-3-4 22:52:09] OUI-67104:OPatch 找不到有效的 oraInst.loc 文件來定位主產品清單。 [2021-3-4 22:52:09] 堆棧說明: java.lang.RuntimeException: OPatch 找不到有效的 oraInst.loc 文件來定位主產品清單。 [2021-3-4 22:52:09] 堆棧跟蹤: oracle.opatch.OPatchEnv.printOPatchHeader(OPatchEnv.java:6225) [2021-3-4 22:52:09] 堆棧跟蹤: oracle.opatch.OPatchSession.process(OPatchSession.java:1925) [2021-3-4 22:52:09] 堆棧跟蹤: oracle.opatch.OPatch.process(OPatch.java:796) [2021-3-4 22:52:09] 堆棧跟蹤: oracle.opatch.OPatch.main(OPatch.java:846)
觀察oraInst.loc 文件
# cat /etc/oraInst.loc inventory_loc=/picclife/app/oraInventory inst_group=oinstall
# ls -ld /etc/oraInst.loc
-rw-r--r--. 1 root root 61 5月 24 2019 /etc/oraInst.loc
這個權限oracle 根本無法讀取,再次找其它的oraInst.loc文件
檢查文本信息! 找到了Oracle Opatch讀取的oraInst.loc配置文件!
發現缺失了一個i字符! ???
$ cat /picclife/app/oracle/product/12.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt Date & Time : Thu Mar 04 22:55:22 CST 2021 Oracle Home : /picclife/app/oracle/product/12.2.0/db_1 OPatch Ver. : 12.2.0.1.6 Current Dir : /picclife/app/oracle/product/12.2.0/db_1/OPatch Command : lsinv -invPtrLoc /picclife/app/oracle/product/12.2.0/db_1/oraInst.loc Log File : /picclife/app/oracle/product/12.2.0/db_1/cfgtoollogs/opatch/opatch2021-03-04_22-55-22下午_1.log c11:/picclife/app/oracle/product/12.2.0/db_1/OPatch$ cat /picclife/app/oracle/product/12.2.0/db_1/oraInst.loc nventory_loc=/picclife/app/oraInventory inst_group=oinstall
修改
inventory_loc=/picclife/app/oraInventory
3.3 驗證
$ ls -lrt /picclife/app/oracle/product/12.2.0/db_1/oraInst.loc -rw-r-----. 1 oracle oinstall 61 5月 24 2019 /picclife/app/oracle/product/12.2.0/db_1/oraInst.loc $ vi /picclife/app/oracle/product/12.2.0/db_1/oraInst.loc inst_group=oinstall $ ./opatch lsinv 已安裝的頂級產品 (1): Oracle Database 12c 12.2.0.1.0 此 Oracle 主目錄中已安裝 1 個產品。 此 Oracle 主目錄中未安裝任何中間補丁程序。 -------------------------------------------------------------------------------- OPatch succeeded. $ $ORACLE_HOME/OPatch/datapatch -prereq SQL Patching tool version 12.2.0.1.0 Production on Thu Mar 4 23:03:19 2021 Copyright (c) 2012, 2017, Oracle. All rights reserved. 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) Determining current state...done Adding patches to installation queue and performing prereq checks...done Installation queue: For the following PDBs: CDB$ROOT PDB$SEED C11PDB Nothing to roll back Nothing to apply SQL Patching tool complete on Thu Mar 4 23:03:29 2021
重啟OK