Come faccio a usare DBMS_QOPATCH su un'istanza Amazon RDS che esegue Oracle 19c?

5 minuti di lettura
0

Dispongo di un'istanza di Amazon Relational Database Service (Amazon RDS) che esegue Oracle 19c. Come faccio a usare la funzionalità di inventario delle patch interrogabile (DBMS_QOPATCH) su Amazon RDS per Oracle?

Descrizione breve

Oracle 19c include una funzionalità di inventario delle patch interrogabile. Questa funzionalità consente agli utenti di recuperare le informazioni sull'inventario del software Oracle dall'interno del database utilizzando il pacchetto DBMS_QOPATCH. Per ulteriori informazioni, consulta la documentazione Oracle per DBMS_QOPATCH.

Nelle versioni precedenti di Oracle, gli utenti possono recuperare le informazioni sull'inventario del software solo utilizzando l'utilità Oracle OPatch. Poiché Amazon RDS limita l'accesso al sistema operativo (OS) sottostante, le versioni precedenti non possono eseguire l'utilità OPatch. In Oracle 19c con Amazon RDS, qualsiasi utente con i privilegi per eseguire il pacchetto DBMS_QOPATCH può recuperare le informazioni sull'inventario del software Oracle.

**Nota:**adesso Amazon RDS include una funzionalità che consente di accedere ai file OPatch dal file di log. Questa funzionalità è attivata per le istanze Oracle rilasciate a partire dal 2020. Se le tue istanze Oracle sono state rilasciate a partire dal 2020, è consigliabile utilizzare questa funzionalità. Per ulteriori informazioni, consulta Accesso ai file OPatch.

Risoluzione

L'inventario delle patch interrogabile utilizza funzionalità esistenti come il supporto XML e le tabelle esterne. Questi esempi mostrano come funziona l'inventario delle patch interrogabile.

In questo esempio, la query OPATCH viene eseguita su tre nuovi oggetti della directory:

SQL> select owner,directory_name,directory_path from dba_directories where directory_name like 'OPATCH%'

Questo è un esempio di output della query:

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

In questo esempio, la query OPATCH viene eseguita su quattro nuove tabelle di sistema:

SQL> select owner,table_name from dba_tables where table_name like 'OPATCH%';

Questo è un esempio di output della query:

OWNER           TABLE_NAME
--------------- ------------------------------
SYS             OPATCH_XML_INV
SYS             OPATCH_XINV_TAB
SYS             OPATCH_INST_PATCH
SYS             OPATCH_SQL_PATCHES
SYS             OPATCH_INST_JOB

La tabella principale è OPATCH_XML_INV, che è estratta completamente dall'inventario in formato XML. La tabella è implementata come tabella esterna che legge dall'inventario:

SQL> select dbms_metadata.get_ddl('TABLE','OPATCH_XML_INV','SYS') from dual;

Questo è un esempio di output della query:

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

L'implementazione viene eseguita dallo script PREPROCESSOR, qopiprep.bat. Questo script si trova nella directory a cui fa riferimento OPATCH_SCRIPT_DIR. Per ulteriori informazioni, consulta la documentazione Oracle per PREPROCESSOR. Vedi la seguente query di esempio che utilizza OPATCH_SCRIPT_DIR:

SQL> select owner,directory_name,directory_path from dba_directories where directory_name='OPATCH_SCRIPT_DIR';

Questo è un esempio di output della query:

OWNER           DIRECTORY_NAME                     DIRECTORY_PATH
--------------- ---------------------------------  ----------------------------------------
SYS             OPATCH_SCRIPT_DIR                  /rdsdbbin/oracle/QOpatch

Lo script qopiprep.bat esegue l'inventario delle patch interrogabile. Quindi genera l'output in XML in modo che possa essere utilizzato come input per la tabella esterna, OPATCH_XML_INV. Poi, il pacchetto e le funzioni forniti da DBMS_QOPATCH possono essere utilizzati per estrarre le informazioni sull'inventario Oracle dalla tabella. Per vedere le funzioni e le procedure fornite dal pacchetto DBMS_QOPATCH, consulta la documentazione Oracle per il riepilogo dei sottoprogrammi DBMS_QOPATCH.

Esegui la seguente query per elencare tutte le patch installate:

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;

Questo è un esempio di output della query:

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)

Per ottenere un output più dettagliato in un formato simile a opatch lsinventory -detail, esegui quanto segue:

set long 200000 pages 0 lines 200
select xmltransform(DBMS_QOPATCH.GET_OPATCH_LSINVENTORY, DBMS_QOPATCH.GET_OPATCH_XSLT) from dual;

Questo è un esempio di output della query:

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

...	
...

Il pacchetto DBMS_QOPATCH fornisce anche le seguenti procedure e funzioni. Per verificare se è stata installata una patch specifica, esegui quanto segue:

select xmltransform(dbms_qopatch.is_patch_installed('<patch number>'), dbms_qopatch.get_opatch_xslt) from dual;

Per ottenere un elenco dei bug corretti dalle patch installate, esegui quanto segue:

select xmltransform(dbms_qopatch.get_opatch_bugs, dbms_qopatch.get_opatch_xslt) from dual;

Per elencare i bug corretti da uno specifico numero di patch, esegui quanto segue:

select xmltransform(dbms_qopatch.get_opatch_bugs(<patch number>), dbms_qopatch.get_opatch_xslt) from dual;

Informazioni correlate

Amministrazione dell’istanza database Oracle

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa