如何在运行 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 软件清单信息。有关更多信息,请参阅适用于 DBMS_QOPATCH 的 Oracle 文档。在早期版本的 Oracle 中,用户只能使用 Oracle OPatch 实用程序检索软件清单的信息。由于 Amazon RDS 限制对底层操作系统 (OS) 的访问,因此用户无法运行 OPatch 实用程序。当您将 Oracle 12c 用于 Amazon RDS 时,任何有权执行 DBMS_QOPATCH 程序包的用户都可以检索 Oracle 软件清单信息。

解决方法

可查询修补程序清单使用现有功能,例如 XML 支持和外部表。请参阅以下示例,以了解可查询修补程序清单的工作原理。

在此例中,对三个新目录对象运行 OPATCH 查询:

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 查询:

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 脚本运行可查询修补程序清单并生成 XML 格式输出,使输出可用作外部表 OPATCH_XML_INV 的输入。然后,DBMS_QOPATCH 提供的程序包和功能可用于从表中提取 Oracle 清单信息。要查看 DBMS_QOPATCH 程序包提供的功能和程序,请参阅适用于 DBMS_QOPATCH 子程序摘要的 Oracle 文档。

运行以下查询以列出所有已安装的修补程序:

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;

这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?