如何在執行 Oracle 19c 的 Amazon RDS 執行個體使用 DBMS_QOPATCH?

4 分的閱讀內容
0

我有一個執行 Oracle 19c 的 Amazon Relational Database Service (Amazon RDS) 執行個體。如何在 Amazon RDS for Oracle 上使用可查詢的修補程式清查 (DBMS_QOPATCH) 功能?

簡短說明

Oracle 19c 包含可查詢的修補庫存功能。此功能可讓使用者使用 DBMS_QOPATCH套件,從資料庫中擷取 Oracle 軟體清查資訊。如需詳細資訊,請參閱 DBMS_QOPATCH 的 Oracle 文件。

在舊版 Oracle 中,使用者只能使用 Oracle OPatch 公用程式來擷取軟體清查資訊。由於 Amazon RDS 限制了對基礎作業系統 (OS) 的存取,因此舊版無法執行 OPatch 公用程式。在使用 Amazon RDS 的 Oracle 19c中,任何具有執行 DBMS_QOPATCH 套件權限的使用者都可以擷取 Oracle 軟體清查資訊。

**注意事項:**Amazon RDS 現在包含一項功能,可讓您從日誌檔存取 OPatch 檔案。對於 2020 年或之後發行的 Oracle 執行個體,此功能已開啟。如果您的 Oracle 執行個體是在 2020 年或之後發行,最佳實務則是使用此功能。如需詳細資訊,請參閱存取 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_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 套件所提供的函數和程序,請參閱適用於 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
----------   ---------- ---------------------------------------------------------------
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;

相關資訊

管理 Oracle 資料庫執行個體

AWS 官方
AWS 官方已更新 2 年前