Comment utiliser la commande DBMS_QOPATCH sur une instance Amazon RDS qui exécute Oracle 12c ?

Date de la dernière mise à jour : 18/06/2019

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

Brève description

Oracle 12c comprend une fonctionnalité d'inventaire des correctifs interrogeables qui permet aux utilisateurs de récupérer les informations d’inventaire du logiciel 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 pouvaient 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 utilisateurs ne pouvaient pas exécuter l'utilitaire OPatch. Lorsque vous utilisez Oracle 12c avec Amazon RDS, les utilisateurs ayant les privilèges pour exécuter le package DBMS_QOPATCH peuvent extraire les informations d'inventaire logiciel Oracle.

Résolution

L'inventaire des correctifs interrogeables utilise des fonctionnalités existantes telles que la prise en charge XML et les tables externes. Consultez les exemples suivants pour connaître le fonctionnement de 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%'

Il s'agit d'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%';

Il s'agit d'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_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;

Il s'agit d'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, qui se trouve dans le répertoire qui est indiqué 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';

Il s'agit d'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 et génère la sortie au format XML afin que la sortie puisse être utilisée comme entrée dans 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 à partir de la table. Pour connaître les fonctions et procédures fournies par le package DBMS_QOPATCH, consultez la documentation Oracle pour 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
----------  ----------  ------------------------------------------------------------------------
  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)

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;

Il s'agit d'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):
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
...
...

Le package DBMS_QOPATCH fournit également les procédures et les 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 uniquement 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;

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?