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:
- Conflito com um patch já aplicado no ORACLE_HOME. Nesse caso pare a atualização e registre um chamado no Oracle Suporte.
- 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.
a. 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
b. 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 -
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.