Aplicando o Oracle Database Bundle Patch em ambiente Oracle 12.1 RAC Multitenant

Por Rogerio Eguchi
Publicado em Março 2018

Revisado por Lorenzo Mota


Esse artigo demonstrará como aplicar o último Oracle Database Proactive Bundle Patch em ambiente Oracle RAC Multitenant.

Nesse momento, o patch a ser aplicado é o 26022196 - Database Proactive Bundle Patch 12.1.0.2.170718.


Validação dos pré-requisitos de instalação

1. Atualização do Opatch

A Oracle recomenda que seja feita a atualização do OPatch antes de iniciar a instalação do Oracle BP.

Para tal, acesse o MOS e faça o download do patch em https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?parent=DOCUMENT&sourceId=1306814.1&patchId=6880880


Copie para o servidor e descompacte.

Remova o OPatch antigo e copie o novo OPatch para os ORACLE_HOMEs:

  rm -rf /u01/app/oracle/product/db/12.1/OPatch/*
rm -rf /u01/app/12.1.0/grid/OPatch/*
cp -r OPatch/* /u01/app/oracle/product/db/12.1/OPatch/
cp -r OPatch/* /u01/app/12.1.0/grid/OPatch/
chown -R grid:oinstall /u01/app/12.1.0/grid/OPatch/
chown -R oracle:oinstall
/u01/app/oracle/product/db/12.1/OPatch/


Execute o opatch version para checar se a atualização foi concluída com sucesso.



2. Valide o Oracle Inventory para checar a consistência das informações do inventório.

  • GI: via usuário grid, execute:
    ORACLE_HOME=/u01/app/12.1.0/grid/; $ORACLE_HOME/OPatch/opatch lsinventory  
    -detail -oh $ORACLE_HOME

  • DB: via usuário oracle, execute:
    ORACLE_HOME=/u01/app/oracle/product/db/12.1/; $ORACLE_HOME/OPatch/opatch  
    lsinventory -detail -oh $ORACLE_HOME
  • Uma lista com os componentes instalados deve ser reportada pelo comando.



3. Download e descompactação do patch

Acesse o MOS e busque pela nota Master Note for Database Proactive Patch Program (Doc ID 756671.1).

Localize os patches recentes disponíveis para a versão do Oracle que deseje atualizar:


Clique no Patch Number e escolha a versão para o seu sistema operacional:

Faça o download, copie o arquivo para o servidor e descompacte.

Mude as permissões para o grid owner: chown -R grid:oinstall 26022196



4. Verificação de conflitos

Para verificar se existe algum one-off patch instalado que conflite com o patch que iremos aplicar, execute:

GI (como usuário grid):

  $ORACLE_HOME/OPatch/opatch prereq 
CheckConflictAgainstOHWithDetail -phBaseDir  
<UNZIPPED_PATCH_LOCATION>/26022196/25869760
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/26022196/25869825
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/26022196/25869830
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/26022196/21436941

DB (como usuário oracle):
  $ORACLE_HOME/OPatch/opatch prereq 
CheckConflictAgainstOHWithDetail -phBaseDir  
<UNZIPPED_PATCH_LOCATION>/26022196/25869760
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/26022196/25869825

Resultado esperado: Prereq "checkConflictAgainstOHWithDetail" passed.

Exemplos:



O opatch categoriza os conflitos em:

    1. Conflito com um patch já aplicado no ORACLE_HOME.
      Nesse caso pare a atualização e registre um chamado no Oracle Suporte.
    2. Conflito com um subset patch já aplicado no ORACLE_HOME.
      Nesse caso continue com a instalação pois o novo patch conterá todas as correções já aplicadas pelo patch instalado. Um subset patch é automaticamente removido antes da instalação do novo patch.



5. Verifique o espaço livre disponível.

Execute a checagem de espaço livre disponível no filesystem do ORACLE_HOME.

    1. GI (como usuário grid): crie o arquivo /tmp/patch_list_gihome.txt com o seguinte conteúdo:
        cat /tmp/patch_list_gihome.txt
      <UNZIPPED_PATCH_LOCATION>/26022196/21436941
      <UNZIPPED_PATCH_LOCATION>/26022196/25869830
      <UNZIPPED_PATCH_LOCATION>/26022196/25869825
      <UNZIPPED_PATCH_LOCATION>/26022196/25869760

      E rode o opatch para checar se existe espaço disponível na home do Grid Infrastructure:

      $ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace 
      -phBaseFile /tmp/patch_list_gihome.txt

    2. DB (como usuário oracle): crie o arquivo /tmp/patch_list_dbhome.txt com o seguinte conteúdo:
      
        cat /tmp/patch_list_dbhome.txt
      <UNZIPPED_PATCH_LOCATION>/26022196/25869825
      <UNZIPPED_PATCH_LOCATION>/26022196/25869760

      E rode o opatch para checar se existe espaço disponível na home do Banco:

        $ORACLE_HOME/OPatch/opatch  prereq CheckSystemSpace 
        -phBaseFile /tmp/patch_list_dbhome.txt


Caso o opatch reporte falha, remova arquivos desnecessários ou cresça o volume.



6. Backup e Recovery

A Oracle recomenda que seja realizado o backup dos ORACLE_HOMEs antes de se aplicar qualquer patch. Utilize sua ferramenta preferida do sistema operacional, exemplos: zip, cp -r, tar, cpio.

Lembre-se de parar os processos Oracle antes de iniciar o backup.

Dica: Faça a instalação do Oracle Software em um LVM e utilize o recurso de snapshots para realizar o backup sem parar os processos do Oracle. Você pode utilizar a própria documentação do Oracle Exadata como referência para execução do backup: http://docs.oracle.com/cd/E80920_01/DBMMN/maintaining-exadata-database-servers.htm#DBMMN21377

Repitas os passos de 1 a 6 nos outros nós do cluster.




Aplicando o Oracle BP 12.1.0.2.170718


No exemplo de execução abaixo, aplicarei o patch em um nó por vez (a Oracle chama esse procedimento de rolling fashion).

No node 1, logue como usuário root e adicione o diretório que contém o opatchauto no PATH:

  export PATH=$PATH:<GI_HOME>/OPatch


Para aplicar o patch no GI home e em todos Oracle RAC database homes da mesma versão, rode:

  opatchauto apply <UNZIPPED_PATCH_LOCATION>/26022196,

e aguarde a execução concluir.


Logue então no outro nó do cluster e execute os mesmos passos do node 1.

  export PATH=$PATH:<GI_HOME>/OPatch
  opatchauto apply <UNZIPPED_PATCH_LOCATION>/26022196,

e aguarde a execução concluir.



Continue até atualizar todos os nós do cluster.

Exemplo:

Execução do OPatchAuto no node 1:




Execução do OPatchAuto no node 2:


Para verificar se os patches foram aplicados, você pode por exemplo rodar:

./opatch lspatches nos ORACLE_HOMEs do GI e DB, em todos os servidores.

Exemplo:




O Datapatch foi executado automaticamente no container root, como podemos verificar abaixo:

Para os PDBs, execute o datapatch manualmente se durante o processo de atualização via opatchauto, algum PDB não estiver aberto.

No exemplo abaixo, o PDB1 estava off-line durante o opatchauto. A execução deve ser feita em um dos nós do cluster somente:




Links úteis:

Automated Multi-Node Patching of Grid Infrastructure and RAC DB Environment Using OPatchAuto - https://docs.oracle.com/cd/E24628_01/doc.121/e39376/opatchauto.htm#OPTCH615

README.HTML - Patch 26022196 - Database Proactive Bundle Patch 12.1.0.2.170718 -                 https://updates.oracle.com/Orion/Services/download?type=readme&aru=21368584



Notas técnicas no MOS:

Datapatch: Database 12c Post Patch SQL Automation (Doc ID 1585822.1)

12.1.0.2 Database Proactive Bundle Patches / Bundle Patches for Engineered Systems and DB In-Memory - List of Fixes in each Bundle (Doc ID 1937782.1)

Database 12.1.0.2 Proactive Patch Information (Doc ID 2285558.1)


Concluímos assim o procedimento de atualização para o último Oracle 12.1.0.2 BP, utilizando-se do OPatchAuto, em um ambiente Oracle RAC Multitenant.



Rogerio Bacchi Eguchi é um DBA Oracle Sênior com extensa experiência em ambientes OLTP de missão crítica e que empregam as tecnologias da "Oracle Maximum Availability Architecture". Atuou como DBA em empresas como Oracle, UOL, UOLDiveo, PagSeguro e atualmente atua como DBA/DMA na TOTVS. Possui as certificações Oracle OCP 8i, 9i, 10g, 11g, 12c e OCE Exadata. Atua também como SysAdmin/DEVOPS onde é certificado Linux RHCE. Entusiata de novas tecnologias como big data, automações e cloud computing. Compartilha conhecimento no blog reguchi.wordpress.com e twitter @reguchi_br.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.