Oracle 12c を実行している Amazon RDS インスタンスで DBMS_QOPATCH を使用する方法を教えてください。

最終更新日: 2019 年 6 月 18 日

Oracle 12c を実行している Amazon Relational Database Service (Amazon RDS) インスタンスがあります。Amazon RDS for Oracle でクエリ可能なパッチインベントリ (DBMS_QOPATCH) 機能を使用するにはどうすればよいですか?

簡単な説明

Oracle 12c には、ユーザーが DBMS_QOPATCH パッケージを使用してデータベース内から Oracle ソフトウェアのインベントリ情報を取得できるクエリ可能なパッチインベントリ機能が含まれています。詳しくは、Oracle の資料「DBMS_QOPATCH」を参照してください。以前のバージョンの Oracle では、ユーザーは Oracle OPatch ユーティリティを使用してのみソフトウェアインベントリ情報を取得できました。Amazon RDS は基盤となるオペレーティングシステム (OS) へのアクセスを制限するため、ユーザーは OPatch ユーティリティを実行できませんでした。Amazon RDS で Oracle 12c を使用するとDBMS_QOPATCH パッケージを実行する権限を持つすべてのユーザーが Oracle ソフトウェアインベントリ情報を取得できます。

解決方法

クエリ可能なパッチインベントリは、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_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 スクリプトは、照会可能なパッチインベントリを実行し、その出力を外部表 OPATCH_XML_INV への入力として使用できるように XML で出力を生成します。その後、DBMS_QOPATCH が提供するパッケージと関数を使用して、テーブルから Oracle インベントリ情報を抽出できます。DBMS_QOPATCH パッケージで提供される機能と手順については、Oracle の資料「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
----------  ----------  ------------------------------------------------------------------------
  17969866   20266857
  18307021   17688457
  22873666   20307375
  22873635   20173886
  22037014   19477445
  20875898   18862169
  19396455   18018276
  18759211   18703381
  17432124   16852639
  16799735   18509762
  23177536   20400035   Database PSU 12.1.0.2.160719, Oracle JavaVM Component (JUL2016)
  23054246   20464632   Database Patch Set Update : 12.1.0.2.160719 (23054246)
  22291127   19694308   Database Patch Set Update : 12.1.0.2.160419 (22291127)
  21948354   19553095   Database Patch Set Update : 12.1.0.2.160119 (21948354)
  21359755   19194568   Database Patch Set Update : 12.1.0.2.5 (21359755)
  20831110   18977826   Database Patch Set Update : 12.1.0.2.4 (20831110)
  20299023   18703022   Database Patch Set Update : 12.1.0.2.3 (20299023)
  19769480   18350083   Database Patch Set Update : 12.1.0.2.2 (19769480)

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):
Oracle Database 12c                                    12.1.0.2.0
Installed Products ( 135)

Oracle Database 12c                                    12.1.0.2.0
Java Development Kit                                   1.6.0.75.0
oracle.swd.oui.core.min                                12.1.0.2.0
Installer SDK Component                                12.1.0.2.0
Oracle One-Off Patch Installer                         12.1.0.1.2
Oracle Universal Installer                             12.1.0.2.0
Oracle USM Deconfiguration                             12.1.0.2.0
Oracle Configuration Manager Deconfiguration           10.3.1.0.0
Oracle RAC Deconfiguration                             12.1.0.2.0
Oracle DBCA Deconfiguration                            12.1.0.2.0
...
...
Oracle OLAP                                            12.1.0.2.0
Oracle Spatial and Graph                               12.1.0.2.0
Oracle Partitioning                                    12.1.0.2.0
Enterprise Edition Options                             12.1.0.2.0


Interim patches:

Patch    17969866:   applied on 2016-08-12T08:33:09Z
Unique Patch ID: 20266857
  Patch Description:
  Created on     : 9 Jun 2016, 10:44:53 hrs PST8PDT
  Bugs fixed:
         17969866
  Files Touched:

    /qctox.o
    /qmxtgx.o
    /qmxtxa.o
    /qmudx.o
    ins_net_client.mk
    /koks2.o
    /qmxstr.o
    ins_rdbms.mk
    ins_rdbms.mk
...
...

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;

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合