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 유틸리티를 실행할 수 없습니다. Amazon RDS에서 Oracle 12c를 사용하는 경우 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

이 구현은 OPATCH_SCRIPT_DIR에서 가리키는 디렉터리에 있는 PREPROCESSOR 스크립트, qopiprep.bat에 의해 실행됩니다. 자세한 내용은 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 패키지에서 제공하는 함수 및 프로시저를 보려면 Summary of DBMS_QOPATCH Subprograms에 대한 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;

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?