Oracle 19c を実行している Amazon RDS インスタンスで DBMS_QOPATCH を使用するにはどうすればよいですか?
Oracle 19c を実行している Amazon Relational Database Service (Amazon RDS) インスタンスがあります。Amazon RDS for Oracle でクエリ可能なパッチインベントリ (DBMS_QOPATCH) 機能を使用するにはどうすればよいですか?
簡単な説明
Oracle 19c には、クエリ可能なパッチインベントリ機能が含まれています。この機能により、ユーザーは DBMS_QOPATCH パッケージを使用して、データベース内から Oracle ソフトウェアインベントリ情報を取得できます。詳細については、Oracle のドキュメント「DBMS_QOPATCH」を参照してください。
以前のバージョンの Oracle では、ユーザーは Oracle OPatch ユーティリティを使用してのみソフトウェアインベントリ情報を取得できました。Amazon RDS は基盤となるオペレーティングシステム (OS) へのアクセスを制限するため、ユーザーは OPatch ユーティリティを実行できませんでした。Amazon RDS で Oracle 19c を使用すると、DBMS_QOPATCH パッケージを実行する権限を持つすべてのユーザーが Oracle ソフトウェアインベントリ情報を取得できます。
注: Amazon RDS には、ログファイルから OPatch ファイルにアクセスできるようにする機能が追加されました。この機能は、2020 年以降にリリースされた Oracle インスタンスで有効です。Oracle インスタンスが 2020 年以降にリリースされた場合は、この機能を使用するのがベストプラクティスです。詳細については、「OPatch ファイルへのアクセス」を参照してください。
解決方法
クエリ可能なパッチインベントリは、XML サポートや外部テーブルなどの既存の機能を使用します。これらの例は、クエリ可能なパッチインベントリがどのように機能するかを示しています。
この例では、OPATCH クエリが 3 つの新しいディレクトリオブジェクトに対して実行されます。
SQL> select owner,directory_name,directory_path from dba_directories where directory_name like 'OPATCH%'
クエリからの出力例を次に示します。
OWNER DIRECTORY_NAME DIRECTORY_PATH ---------- -------------------- -------------------------------------------------- SYS OPATCH_SCRIPT_DIR /rdsdbbin/oracle/QOpatch SYS OPATCH_LOG_DIR /rdsdbbin/oracle/QOpatch SYS OPATCH_INST_DIR /rdsdbbin/oracle/OPatch
次の例では、OPATCH クエリは 4 つの新しいシステムテーブルで実行されます。
SQL> select owner,table_name from dba_tables where table_name like 'OPATCH%';
クエリからの出力例を次に示します。
OWNER TABLE_NAME --------------- ------------------------------ SYS OPATCH_XML_INV SYS OPATCH_XINV_TAB SYS OPATCH_INST_PATCH SYS OPATCH_SQL_PATCHES SYS OPATCH_INST_JOB
メインテーブルは OPATCH_XML_INV です。これは、XML 形式のインベントリを完全に抽出したものです。次のテーブルは、インベントリから読み取る外部テーブルとして実装されています。
SQL> select dbms_metadata.get_ddl('TABLE','OPATCH_XML_INV','SYS') from dual;
クエリからの出力例を次に示します。
DBMS_METADATA.GET_DDL('TABLE','OPATCH_XML_INV','SYS') -------------------------------------------------------------------------------- CREATE TABLE "SYS"."OPATCH_XML_INV" ( "XML_INVENTORY" CLOB ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY "OPATCH_SCRIPT_DIR" ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET UTF8 DISABLE_DIRECTORY_LINK_CHECK READSIZE 8388608 preprocessor opatch_script_dir:'qopiprep.bat' BADFILE opatch_script_dir:'qopatch_bad.bad' LOGFILE opatch_log_dir:'qopatch_log.log' FIELDS TERMINATED BY 'UIJSVTBOEIZBEFFQBL' MISSING FIELD VALUES ARE NULL REJECT ROWS WITH ALL NULL FIELDS ( xml_inventory CHAR(100000000) ) ) LOCATION ( "OPATCH_SCRIPT_DIR":'qopiprep.bat' ) ) REJECT LIMIT UNLIMITED
実装は、PREPROCESSOR スクリプトの qopiprep.bat によって行われます。このスクリプトは、OPATCH_SCRIPT_DIR によってポイントされるディレクトリにあります。詳細については、PREPROCESSOR についての Oracle のドキュメントを参照してください。OPATCH_SCRIPT_DIR を使用する以下のクエリ例を参照してください。
SQL> select owner,directory_name,directory_path from dba_directories where directory_name='OPATCH_SCRIPT_DIR';
クエリからの出力例を次に示します。
OWNER DIRECTORY_NAME DIRECTORY_PATH --------------- --------------------------------- ---------------------------------------- SYS OPATCH_SCRIPT_DIR /rdsdbbin/oracle/QOpatch
qopiprep.bat スクリプトは、クエリ可能なパッチインベントリを実行します。その後、出力を XML で生成し、その出力を外部テーブル OPATCH_XML_INV への入力として使用できるようにします。その後、DBMS_QOPATCH が提供するパッケージと関数を使用して、テーブルから Oracle インベントリ情報を抽出できます。DBMS_QOPATCH パッケージで提供される機能と手順については、Oracle のドキュメント「Summary of DBMS_QOPATCH subprograms」(DBMS_QOPATCH サブプログラムの概要) を参照してください。
次のクエリを実行して、インストールされているすべてのパッチを一覧表示します。
with a as (select dbms_qopatch.get_opatch_lsinventory patch_output from dual) select x.patch_id, x.patch_uid, x.description from a, xmltable('InventoryInstance/patches/*' passing a.patch_output columns patch_id number path 'patchID', patch_uid number path 'uniquePatchID', description varchar2(80) path 'patchDescription') x;
以下はクエリからの出力例です。
PATCH_ID PATCH_UID DESCRIPTION ---------- ---------- --------------------------------------------------------------- 33613833 24537804 DSTV37 UPDATE - TZDATA2021E - NEED OJVM FIX 33613829 24529874 RDBMS - DSTV37 UPDATE - TZDATA2021E 32327201 24049836 RDBMS - DSTV36 UPDATE - TZDATA2020E 31335037 23600477 RDBMS - DSTV35 UPDATE - TZDATA2020A 29997937 23062124 RDBMS - DSTV34 UPDATE - TZDATA2019B 28852325 23061696 RDBMS - DSTV33 UPDATE - TZDATA2018G 29213893 24595383 DBMS_STATS FAILING WITH ERROR ORA-01422 WHEN GATHERING STATS FOR USER$ TABLE 28730253 23062304 SUPPORT NEW ERA REIWA FOR JAPANESE IMPERIAL CALENDAR 33561310 24538862 OJVM RELEASE UPDATE: 19.14.0.0.220118 (33561310) 33515361 24589353 Database Release Update : 19.14.0.0.220118 (33515361) 29585399 22840393 OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
opatch lsinventory -detail のような形式でより詳細な出力を取得するには、次のコマンドを実行します。
set long 200000 pages 0 lines 200 select xmltransform(DBMS_QOPATCH.GET_OPATCH_LSINVENTORY, DBMS_QOPATCH.GET_OPATCH_XSLT) from dual;
クエリからの出力例を次に示します。
Oracle Querayable Patch Interface 1.0 -------------------------------------------------------------------------------- Oracle Home : /rdsdbbin/oracle Inventory : /rdsdbbin/oraInventory --------------------------------------------------------------------------------Installed Top-level Products (1): 19.0.0.0.0 Installed Products ( 128) Oracle Database 19c 19.0.0.0.0 Java Development Kit 1.8.0.201.0 oracle.swd.oui.core.min 12.2.0.7.0 Installer SDK Component 12.2.0.7.0 Oracle One-Off Patch Installer 12.2.0.1.15 Oracle Universal Installer 12.2.0.7.0 oracle.swd.commonlogging 13.3.0.0.0 Trace File Analyzer for DB 19.0.0.0.0 Oracle USM Deconfiguration 19.0.0.0.0 Oracle DBCA Deconfiguration 19.0.0.0.0 ... ... Oracle Advanced Security 19.0.0.0.0 Oracle Internet Directory Client 19.0.0.0.0 Oracle Net Listener 19.0.0.0.0 HAS Files for DB 19.0.0.0.0 Oracle Database Provider for DRDA 19.0.0.0.0 Oracle Text 19.0.0.0.0 Oracle Net Services 19.0.0.0.0 Oracle Database 19c 19.0.0.0.0 Oracle OLAP 19.0.0.0.0 Oracle Spatial and Graph 19.0.0.0.0 Oracle Partitioning 19.0.0.0.0 Enterprise Edition Options 19.0.0.0.0 Interim patches: Patch 33613833: applied on 2022-02-07T08:53:35Z Unique Patch ID: 24537804 Patch Description: DSTV37 UPDATE - TZDATA2021E - NEED OJVM FIX Created on : 9 Dec 2021, 01:32:48 hrs PST8PDT Bugs fixed: 33613833 Files Touched: tzdb.dat fixTZa.sql fixTZb.sql ... ...
DBMS_QOPATCH パッケージは、次の手順と機能も提供します。特定のパッチがインストールされているかどうかを確認するには、次のコマンドを実行します。
select xmltransform(dbms_qopatch.is_patch_installed('<patch number>'), dbms_qopatch.get_opatch_xslt) from dual;
インストールされているパッチで修正されているバグのリストを取得するには、次のコマンドを実行します。
select xmltransform(dbms_qopatch.get_opatch_bugs, dbms_qopatch.get_opatch_xslt) from dual;
特定のパッチ番号で修正されたバグを一覧表示するには、次のコマンドを実行します。
select xmltransform(dbms_qopatch.get_opatch_bugs(<patch number>), dbms_qopatch.get_opatch_xslt) from dual;
関連情報
関連するコンテンツ
- 質問済み 8年前lg...
- 質問済み 9日前lg...
- 質問済み 6年前lg...