Como uso o DBMS_QOPATCH em uma instância do Amazon RDS que está executando o Oracle 19c?

6 minuto de leitura
0

Eu tenho uma instância do Amazon Relational Database Service (Amazon RDS) que está executando o Oracle 19c. Como posso usar o recurso de inventário de patch consultável (DBMS_QOPATCH) no Amazon RDS para Oracle?

Breve descrição

O Oracle 19c inclui um recurso de inventário de patch que pode ser consultado. O recurso permite que os usuários recuperem informações de inventário de software Oracle de dentro do banco de dados usando o pacote DBMS_QOPATCH. Para obter mais informações, consulte a documentação da Oracle para DBMS_QOPATCH.

Nas versões anteriores do Oracle, os usuários só podiam recuperar informações de inventário de software usando o utilitário Oracle OPatch. Como o Amazon RDS restringe o acesso ao sistema operacional (SO) subjacente, as versões anteriores não podem executar o utilitário OPatch. No Oracle 19c com Amazon RDS, qualquer usuário com privilégios para executar o pacote DBMS_QOPATCH pode recuperar informações de inventário de software Oracle.

**Observação:**O Amazon RDS agora inclui um recurso que permite acessar arquivos OPatch a partir do arquivo de log. Esse recurso está ativado para instâncias Oracle lançadas em 2020 ou posteriores. Se suas instâncias Oracle foram lançadas em 2020 ou mais tarde, é uma prática recomendada usar esse recurso. Para obter mais informações, consulte Acessando arquivos OPatch.

Resolução

O inventário de patch que pode ser consultado usa recursos existentes, como suporte a XML e tabelas externas. Esses exemplos mostram como funciona o inventário de patch que pode ser consultado.

Neste exemplo, a consulta OPATCH é executada em três novos objetos de diretório:

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

Este é um exemplo de saída da 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

Neste exemplo, a consulta OPATCH é executada em quatro novas tabelas do sistema:

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

Este é um exemplo de saída da consulta:

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

A tabela principal é OPATCH_XML_INV, que é um extrato completo do inventário no formato XML. A tabela é implementada como uma tabela externa que lê o inventário:

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

Este é um exemplo de saída da 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

A implementação é feita pelo script PREPROCESSOR qopiprep.bat. Esse script está localizado no diretório apontado por OPATCH_SCRIPT_DIR. Para obter mais informações, consulte a documentação da Oracle para PREPROCESSOR. Veja o exemplo de consulta a seguir que usa o OPATCH_SCRIPT_DIR:

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

Este é um exemplo de saída da consulta:

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

O script qopiprep.bat executa o inventário de patch que pode ser consultado. Em seguida, ele gera a saída em XML para que a saída possa ser usada como entrada para a tabela externa, OPATCH_XML_INV. Em seguida, o pacote e as funções fornecidos pelo DBMS_QOPATCH podem ser usados para extrair informações de inventário Oracle da tabela. Para ver as funções e procedimentos fornecidos pelo pacote DBMS_QOPATCH, consulte a documentação da Oracle para o Resumo dos subprogramas DBMS_QOPATCH.

Execute a consulta a seguir para listar todos os patches 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 é um exemplo de saída da 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 obter uma saída mais detalhada em um formato semelhante ao opatch lsinventory -detail, execute o seguinte:

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

Este é um exemplo de saída da 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

...	
...

O pacote DBMS_QOPATCH também fornece os seguintes procedimentos e funções. Execute o seguinte para verificar se um patch específico está instalado:

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

Execute o seguinte para obter uma lista de bugs corrigidos pelos patches instalados:

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

Execute o seguinte para listar os bugs corrigidos por um número de patch específico:

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

Informações relacionadas

Administrando sua instância de banco de dados Oracle

AWS OFICIAL
AWS OFICIALAtualizada há um ano