Comment utiliser DBMS_QOPATCH sur une instance Amazon RDS qui exécute Oracle 12c ?
Date de la dernière mise à jour : 09/06/2022
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 for Oracle ?
Brève description
Oracle 12c 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 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 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. 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_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
---------- ---------- ------------------------------------------------------------------------
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;
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):
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 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
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?