Comment utiliser DBMS_QOPATCH sur une instance Amazon RDS qui exécute Oracle 19c ?

Lecture de 6 minute(s)
0

Je dispose d'une instance Amazon Relational Database Service (Amazon RDS) qui exécute Oracle 19c. Comment utiliser la fonction d'inventaire des correctifs interrogeables (DBMS_QOPATCH) sur Amazon RDS for Oracle ?

Brève description

Oracle 19c inclut une fonction d'inventaire des correctifs interrogeable. Cette fonctionnalité permet aux utilisateurs de récupérer les informations d'inventaire des logiciels Oracle à partir de la base de données à l'aide du package DBMS_QOPATCH. Pour plus d'informations, consultez la documentation Oracle pour DBMS_QOPATCH.

Dans les versions antérieures d'Oracle, les utilisateurs peuvent récupérer les données d'inventaire logiciel en utilisant l'utilitaire Oracle OPatch. Comme Amazon RDS limite l'accès au système d'exploitation sous-jacent (OS), les versions précédentes ne peuvent pas exécuter l'utilitaire OPatch. Dans utilisez Oracle 19c avec Amazon RDS, les utilisateurs dotés des privilèges pour exécuter le package DBMS_QOPATCH peuvent extraire les informations d'inventaire logiciel Oracle.

Remarque : Amazon RDS inclut désormais une fonctionnalité qui vous permet d'accéder aux fichiers OPatch à partir du fichier journal. Cette fonctionnalité est activée pour les instances Oracle sorties en 2020 ou ultérieurement. Si vos instances Oracle ont été publiées en 2020 ou ultérieurement, il est recommandé d'utiliser cette fonctionnalité. Pour plus d'informations, consultez la section Accès aux fichiers OPatch.

Solution

L'inventaire des correctifs interrogeables utilise des fonctionnalités existantes telles que la prise en charge XML et les tables externes. Ces exemples montrent comment fonctionne l'inventaire des correctifs interrogeables.

Dans cet exemple, la requête OPATCH est exécutée sur trois nouveaux objets de répertoire :

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

Voici un exemple de sortie de la requête :

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

Dans cet exemple, la requête OPATCH est exécutée sur quatre nouvelles tables système :

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

Voici un exemple de sortie de la requête :

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

La table principale est OPATCH_XML_INV, qui est un extrait complet de l'inventaire au format XML. La table est implémentée comme table externe qui lit les données à partir de l'inventaire :

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

Voici un exemple de sortie de la requête :

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'implémentation est effectuée par le script PREPROCESSOR, qopiprep.bat. Ce script se trouve dans le répertoire pointé par OPATCH_SCRIPT_DIR. Pour plus d'informations, consultez la documentation Oracle pour PREPROCESSOR. Consultez l'exemple de requête suivant qui utilise la OPATCH_SCRIPT_DIR :

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

Voici un exemple de sortie de la requête :

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

Le script qopiprep.bat exécute l'inventaire des correctifs interrogeables. Il génère ensuite la sortie au format XML afin que la sortie puisse être utilisée comme entrée de la table externe, OPATCH_XML_INV. Ensuite, le package et les fonctions fournis par DBMS_QOPATCH peuvent être utilisés pour extraire les informations d'inventaire Oracle à partir de la table. Pour connaître les fonctions et procédures fournies par le package DBMS_QOPATCH, consultez la documentation Oracle pour obtenir le Résumé des sous-programmes DBMS_QOPATCH.

Exécutez la requête suivante pour afficher tous les correctifs installés :

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;

Il s'agit d'un exemple de sortie de la requête :

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)

Pour obtenir une sortie plus détaillée dans un format similaire à opatch lsinventory -détail, exécutez la commande suivante :

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

Voici un exemple de sortie de la requête :

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

... 
...

Le package DBMS_QOPATCH fournit également les procédures et fonctions suivantes. Pour vérifier qu'un correctif est installé, exécutez la commande suivante :

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

Pour obtenir la liste des bogues corrigés par les correctifs installés, exécutez la commande suivante :

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

Pour répertorier les bogues corrigés par un numéro de correctif, procédez comme suit :

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

Informations connexes

Administration de votre instance DB Oracle

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an