Oracle 12c를 실행하는 Amazon RDS 인스턴스에서 DBMS_QOPATCH를 사용하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2022년 6월 9일
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 소프트웨어 인벤토리 정보를 검색할 수 있습니다.
참고: 이제 Amazon RDS에는 로그 파일에서 OPatch 파일에 액세스할 수 있는 기능이 포함되어 있습니다. 이 기능은 2020년 이후에 출시된 Oracle 인스턴스에 대해 활성화됩니다. 자세한 내용은 OPatch 파일 액세스를 참조하세요.
해결 방법
쿼리 가능한 패치 인벤토리는 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 스크립트는 쿼리 가능한 패치 인벤토리를 실행합니다. 그런 다음 출력을 외부 테이블 OPATCH_XML_INV에 대한 입력으로 사용할 수 있도록 XML로 출력을 생성합니다. 그런 다음, 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;