原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/dbms_qopatch_does_not_work
以下のエントリにコメントをくれたMurthyと、最終的にER(Enhancement Request)になったSR(Service Request)を起票してくれたSimCorpのJeannette Hollandに感謝します。
https://blogs.oracle.com/UPGRADE/entry/dbms_qopatch_does_not_work
以下のエントリにコメントをくれたMurthyと、最終的にER(Enhancement Request)になったSR(Service Request)を起票してくれたSimCorpのJeannette Hollandに感謝します。
How to find out if a PSU has been applied? DBMS_QOPATCH
https://blogs.oracle.com/UPGRADE/entry/dbms_qopatch_datapatch_and_other
DBMS_QOPATCH in Multitenant
DBMS_QOPATCHはCDB$ROOT内で実行した場合に限り、インストール済みのパッチに関する有用な情報を取得できます。このデザインはOracle Database 12.1のセキュリティ上の理由によるものです。PDBにインストールされたパッチを確認する必要がある場合にも情報を取得することができます。Testcase
JannetteのSRからテストケースを拝借しました。PDBで実行してみると……SQL> COLUMN NAME FORMAT A8
SQL>
SQL> SELECT NAME, CON_ID, DBID, CON_UID, GUID FROM V$CONTAINERS ORDER BY CON_ID;
NAME CON_ID DBID CON_UID GUID
-------- ------ ---------- ---------- ------------------
CDB$ROOT 1 3424772713 1 47C8525C0DFE49...
PDB$SEED 2 3983775695 3983775695 E6204BB1F6EB4F...
MYPDB1 3 7270044002 7270044002 B975668B860049...
MYPDB2 4 1943363979 1943363979 BCD7AAFAF3F641...
CDBで実行してみると……ALTER SESSION SET container = myPDB;
Session altered.
SQL> select * from OPATCH_XML_INV ;
ERROR:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04080: directory object OPATCH_LOG_DIR not found
no rows selected
SQL> select dbms_qopatch.get_opatch_install_info from dual;
ERROR:
ORA-20001: Latest xml inventory is not loaded into table
ORA-06512: at "SYS.DBMS_QOPATCH", line 1986
ORA-06512: at "SYS.DBMS_QOPATCH", line 133
SQL> ALTER SESSION SET container = cdb$root;
Session altered.
SQL> select * from OPATCH_XML_INV ;
XML_INVENTORY
--------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<InventoryInstance>
SQL> select dbms_qopatch.get_opatch_install_info from dual;
GET_OPATCH_INSTALL_INFO
--------------------------------------------------------------------------------
<oracleHome><UId>OracleHome-2d1c0910-36ac-429b-98db-96a353d423b6</UId><targetTyp
Solution
Oracle Database 12.1.0.2の場合、現時点で有効な解決策はありません。また、この挙動はドキュメントに記載されていないようです。結果として起票されたSRがEnhancement Requestとなりました。Oracle Database 12.1.0.2のPDBでは、以下の回避策がお役に立つかもしれませんが、DBMSのパッケージを呼び出すAPIを使うため、面倒でしかも簡単ではありません。Oracle Database 12.2.0.1でテストしたところ、期待通りに動作してくれました。select patch_id, patch_uid, version, action, action_time, status, description from dba_registry_sqlpatch;
SQL> create pluggable database PDB3 admin user adm identified by adm file_name_convert=( '/u02/oradata/CDB2/pdbseed', '/u02/oradata/CDB2/pdb3');
Pluggable database created.
SQL> alter pluggable database pdb3 open;
Pluggable database altered.
SQL> alter session set container=pdb3;
Session altered.
SQL> select dbms_qopatch.get_opatch_install_info from dual;
GET_OPATCH_INSTALL_INFO
--------------------------------------------------------------------------------
<oracleHome><UId>OracleHome-3cb04a3a-3999-4767-86f1-bc845cab158e</UId><targetTyp
SQL> select * from OPATCH_XML_INV ;
XML_INVENTORY
--------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Inv
entoryInstance> <ora
SQL> select xmltransform(dbms_qopatch.get_opatch_lsinventory, dbms_qopatch.get_opatch_xslt) from dual;
XMLTRANSFORM(DBMS_QOPATCH.GET_OPATCH_LSINVENTORY,DBMS_QOPATCH.GET_OPATCH_XSLT)
--------------------------------------------------------------------------------
Oracle Querayable Patch Interface 1.0
-----------------------------------------
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 PDB3 READ WRITE NO