¿Cómo puedo utilizar el DBMS_QOPATCH en una instancia de Amazon RDS que ejecuta Oracle 19c?

6 minutos de lectura
0

Tengo una instancia de Amazon Relational Database Service (Amazon RDS) que ejecuta Oracle 19c. ¿Cómo puedo utilizar la función de inventario de parches consultables (DBMS_QOPATCH) de Amazon RDS para Oracle?

Breve descripción

Oracle 19c incluye una función de inventario de parches consultables. La función permite a los usuarios recuperar la información de inventario del software de Oracle desde la base de datos mediante el paquete DBMS_QOPATCH. Para obtener más información, consulte la documentación de Oracle para DBMS_QOPATCH.

En versiones anteriores de Oracle, los usuarios solo podían recuperar la información de inventario de software mediante la utilidad Oracle OPatch. Dado que Amazon RDS restringe el acceso al sistema operativo (SO) subyacente, las versiones anteriores no pueden ejecutar la utilidad OPatch. En Oracle 19c con Amazon RDS, cualquier usuario con privilegios para ejecutar el paquete DBMS_QOPATCH puede recuperar la información de inventario del software de Oracle.

**Nota:**Amazon RDS ahora incluye una función que le permite acceder a los archivos OPatch desde el archivo de registro. Esta función está activada para las instancias de Oracle lanzadas en 2020 o más adelante. Si sus instancias de Oracle se lanzaron en 2020 o más adelante, se recomienda utilizar esta función. Para obtener más información, consulte Acceder a los archivos OPatch.

Resolución

El inventario de parches consultables utiliza funciones existentes, como la compatibilidad con XML y las tablas externas. Estos ejemplos muestran cómo funciona el inventario de parches consultables.

En este ejemplo, la consulta OPATCH se ejecuta en tres objetos de directorio nuevos:

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

Este es un ejemplo de resultado de la consulta:

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

En este ejemplo, la consulta OPATCH se ejecuta en cuatro tablas nuevas del sistema:

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

Este es un ejemplo de resultado de la consulta:

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

La tabla principal es OPATCH_XML_INV, que es un extracto completo del inventario en formato XML. La tabla se implementa como una tabla externa que lee del inventario:

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

Este es un ejemplo de resultado de la consulta:

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

La implementación se realiza mediante el script PREPROCESSOR, qopiprep.bat. Este script se encuentra en el directorio al que apunta OPATCH_SCRIPT_DIR. Para obtener más información, consulte la documentación de Oracle para PREPROCESSOR. Consulte el siguiente ejemplo de consulta que utiliza el OPATCH_SCRIPT_DIR:

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

Este es un ejemplo de resultado de la consulta:

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

El script qopiprep.bat ejecuta el inventario de parches consultables. A continuación, genera la salida en XML para que pueda usarse como entrada a la tabla externa, OPATCH_XML_INV. A continuación, el paquete y las funciones proporcionados por DBMS_QOPATCH pueden utilizarse para extraer la información de inventario de Oracle de la tabla. Para ver las funciones y los procedimientos que proporciona el paquete DBMS_QOPATCH, consulte la documentación de Oracle para ver el resumen de los subprogramas DBMS_QOPATCH.

Ejecute la siguiente consulta para ver una lista de todos los parches instalados:

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;

Este es un ejemplo de resultado de la consulta:

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)

Para obtener un resultado más detallado en un formato similar a opatch lsinventory-detail, ejecute lo siguiente:

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

Este es un ejemplo de resultado de la consulta:

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

...	
...

El paquete DBMS_QOPATCH también proporciona los siguientes procedimientos y funciones. Ejecute lo siguiente para comprobar si hay un parche específico instalado:

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

Ejecute lo siguiente para obtener una lista de los errores corregidos por los parches instalados:

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

Ejecute lo siguiente para enumerar los errores corregidos por un número de parche específico:

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

Información relacionada

Administración de una instancia de base de datos Oracle

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año