Este post demonstra como aplicar o Release Update (RU) + MRP (Monlty Recommended Patches) + OneOffs patches no Grid Infrastructure e Oracle Database Home em um ambiente com Oracle RAC usando a abordagem Out-Of-Place. Nesta estratégia, toda a preparação do ambiente, incluindo instalação de novos binários e aplicação dos patches são realizadas antes da janela de manutenção, e durante a janela, todos os serviços são migrados do Oracle Home atual para o novo (GRID e RDBMS) em um único restart por node.
Apesar de o opatchauto ter a opção -outofplace que permite automatizar uma aplicação de patch usando a estratégia Out-Of-Place sem muito esforço, no dia a dia eu acabo optando pela abordagem de criar um novo Oracle Home manualmente e aplicando todos os patches que preciso durante a instalação, deixando a janela de manutenção apenas para fazer a troca do Oracle Home com a opção -switchGiHome disponível no script gridSetup.sh.
Eu opto por essa abordagem porque os bancos que administro geralmente tem alguns patches adicionais (OneOffs) obrigatórios para aplicar em cima do último RU, o que eu não acho muito usual no opatchauto por eu não conseguir colocar todos os patches (RU + OneOff) em uma única sessão, além de não poder aplicar manualmente algum patch em cima do novo Oracle Home antes de fazer o switch.
Na janela eu modifico a propriedade do Oracle Home do (ou dos) database via “srvctl modify database” antes de executar o -switchGiHome, dessa forma o GRID e RDBMS são atualizados com um único restart.
Ambiente de teste
Cluster: RAC 2 Nodes na versão 19c
Hostnames: rac01, rac02
Grid Owner: grid
DB Owner: oracle
| Item | Atual | Novo |
| RU | 19.12 | 19.20 |
| GRID Home | /u01/app/product/19.0.0.0/grid | /u01/app/product/19.0.0.0/grid_home2 |
| DB Home | /u01/app/oracle/product/19.0.0.0/db_1 | /u01/app/oracle/product/19.0.0.0/db_2 |
Passo a Passo
1) GRID Home
1.1) Com root, crie o diretório que será o novo GRID Home em todos os nodes do RAC.
mkdir -p /u01/app/product/19.0.0.0/grid_home2 chown -R grid.oinstall /u01/app/product/19.0.0.0/grid_home2
1.2) Coloque o binário do GRID, RDBMS, OPatch, Release Update + Interim Patches (se tiver algum) em um diretório de um dos nodes do RAC, eu normalmente utilizo o node 1.
Neste exemplo irei aplicar os seguintes patches (em produção eu tenho uma lista maior de patches específicos para aplicar):
- RU 19.20
- MRP 19.20.0.0.230919
- JDK Update
[root@rac01 ~]# cd /u01/patches [root@rac01 patches]# ls -l *.zip -rwxr-xr-x 1 grid oinstall 3059705302 Sep 25 20:00 LINUX.X64_193000_db_home.zip -rwxr-xr-x 1 grid oinstall 2889184573 Sep 25 20:00 LINUX.X64_193000_grid_home.zip -rw-r--r-- 1 grid oinstall 2990370786 Sep 25 20:00 p35319490_190000_Linux-x86-64.zip -rw-r--r-- 1 grid oinstall 119240906 Sep 25 20:00 p35336174_190000_Linux-x86-64.zip -rw-r--r-- 1 grid oinstall 507711339 Sep 25 20:00 p35755646_1920000DBRU_Linux-x86-64.zip -rw-r--r-- 1 grid oinstall 125167420 Sep 25 20:00 p6880880_190000_Linux-x86-64.zip
1.3) Descompacte todos os patches:
[grid@rac01 patches]$ unzip -qo p35319490_190000_Linux-x86-64.zip [grid@rac01 patches]$ unzip -qo p35755646_1920000DBRU_Linux-x86-64.zip [grid@rac01 patches]$ unzip -qo p35336174_190000_Linux-x86-64.zip
1.4) Com grid owner, acesse o diretório que será o novo GRID Home e descompacte o binário baixado do Oracle e-Delivery:
[grid@rac01 ~]$ cd /u01/app/product/19.0.0.0/grid_home2 [grid@rac01 grid_home2]$ unzip -qo /u01/patches/LINUX.X64_193000_grid_home.zip -d .
1.5) Atualize o OPatch substituindo o original pela versão mais recente disponível em Patch 6880880:
[grid@rac01 grid_home2]$ rm -rf OPatch/ [grid@rac01 grid_home2]$ unzip -qo /u01/patches/p6880880_190000_Linux-x86-64.zip -d .
1.6) Se você não conhece o padrão de grupos de SO usados na instalção do ambiente, descubra agora (usar os grupos corretos fará diferença na hora do switch):
[grid@rac01]$ export OLD_HOME=/u01/app/product/19.0.0.0/grid [grid@rac01]$ grep define $OLD_HOME/rdbms/lib/config.c
O resultado deve ser similar a este, variando os nomes dos grupos de acordo ao padrão de cada ambiente:
/* SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access. */
#define SS_DBA_GRP "asmdba"
#define SS_OPER_GRP "oinstall"
#define SS_ASM_GRP "asmadmin"
#define SS_BKP_GRP "asmadmin"
#define SS_DGD_GRP "asmadmin"
#define SS_KMT_GRP "asmadmin"
#define SS_RAC_GRP "asmadmin"
1.7) Defina as variáveis ORACLE_BASE e ORACLE_HOME para a nova instalação (ORACLE_BASE mantém o caminho original):
[grid@rac01]$ export ORACLE_BASE=/u01/app/grid [grid@rac01]$ export ORACLE_HOME=/u01/app/product/19.0.0.0/grid_home2
1.8) Execute o comando de instalação passando o caminho completo do RU na opção -applyRU e a lista de diretório dos patches adicionais em -applyOneOffs. Neste exemplo, em applyOneOffs eu estou passando caminho base do MRP e o caminho do patch do JDK, separados por virgula.
Se tivesse mais patches para aplicar, poderia ir adicionando mais diretórios separados por vrgula.
$ORACLE_HOME/gridSetup.sh -ignorePrereq -waitforcompletion -silent \
-applyRU /u01/patches/35319490 \
-applyOneOffs /u01/patches/35755646,/u01/patches/35336174 \
-responseFile $ORACLE_HOME/install/response/gridsetup.rsp \
INVENTORY_LOCATION=/u01/app/oraInventory \
SELECTED_LANGUAGES=en \
oracle.install.option=CRS_SWONLY \
ORACLE_BASE=${ORACLE_BASE} \
ORACLE_HOME=${ORACLE_HOME} \
UNIX_GROUP_NAME=oinstall \
oracle.install.asm.OSDBA=asmdba \
oracle.install.asm.OSOPER=oinstall \
oracle.install.asm.OSASM=asmadmin \
oracle.install.crs.config.ClusterConfiguration=STANDALONE \
oracle.install.crs.config.autoConfigureClusterNodeVIP=false \
oracle.install.crs.config.clusterNodes=rac01,rac02
Se você tiver algum erro de OneOff patch que não pode ser aplicado porque depende do RU que já está sendo aplicado neste mesmo comando na opção -applyRU, teste uma sintaxe alternativa demonstrada neste post:
Script gridSetup.sh Falha Se Um Patch Listado em “applyOneOffs” Depender do RU Listado em “applyRU”
Exemplo:
[grid@rac01 grid_home2]$ export ORACLE_BASE=/u01/app/grid
[grid@rac01 grid_home2]$ export ORACLE_HOME=/u01/app/product/19.0.0.0/grid_home2
[grid@rac01 grid_home2]$ $ORACLE_HOME/gridSetup.sh -ignorePrereq -waitforcompletion -silent \
> -applyRU /u01/patches/35319490 \
> -applyOneOffs /u01/patches/35755646,/u01/patches/35336174 \
> -responseFile $ORACLE_HOME/install/response/gridsetup.rsp \
> INVENTORY_LOCATION=/u01/app/oraInventory \
> SELECTED_LANGUAGES=en \
> oracle.install.option=CRS_SWONLY \
> ORACLE_BASE=${ORACLE_BASE} \
> ORACLE_HOME=${ORACLE_HOME} \
> UNIX_GROUP_NAME=oinstall \
> oracle.install.asm.OSDBA=asmdba \
> oracle.install.asm.OSOPER=oinstall \
> oracle.install.asm.OSASM=asmadmin \
> oracle.install.crs.config.ClusterConfiguration=STANDALONE \
> oracle.install.crs.config.autoConfigureClusterNodeVIP=false \
> oracle.install.crs.config.clusterNodes=rac01,rac02
Preparing the home to patch...
Applying the patch /u01/patches/35319490...
Successfully applied the patch.
Applying the patch /u01/patches/35755646...
Successfully applied the patch.
Applying the patch /u01/patches/35336174...
Successfully applied the patch.
The log can be found at: /u01/app/oraInventory/logs/GridSetupActions2023-09-25_10-13-26PM/installerPatchActions_2023-09-25_10-13-26PM.log
Launching Oracle Grid Infrastructure Setup Wizard...
[WARNING] [INS-13014] Target environment does not meet some optional requirements.
CAUSE: Some of the optional prerequisites are not met. See logs for details. /u01/app/oraInventory/logs/GridSetupActions2023-09-25_10-13-26PM/gridSetupActions2023-09-25_10-13-26PM.log
ACTION: Identify the list of failed prerequisite checks from the log: /u01/app/oraInventory/logs/GridSetupActions2023-09-25_10-13-26PM/gridSetupActions2023-09-25_10-13-26PM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the prerequisites and fix it manually.
The response file for this session can be found at:
/u01/app/product/19.0.0.0/grid_home2/install/response/grid_2023-09-25_10-13-26PM.rsp
You can find the log of this install session at:
/u01/app/oraInventory/logs/GridSetupActions2023-09-25_10-13-26PM/gridSetupActions2023-09-25_10-13-26PM.log
As a root user, execute the following script(s):
1. /u01/app/product/19.0.0.0/grid_home2/root.sh
Execute /u01/app/product/19.0.0.0/grid_home2/root.sh on the following nodes:
[rac01, rac02]
Successfully Setup Software with warning(s).
Quando você executa este comando em apenas um dos nodes, ele vai fazer a instalação em todos os nodes do cluster listados em “oracle.install.crs.config.clusterNodes”, sempre inclua a relação de todos os hostnames do cluster. Neste exemplo, são os nodes rac01 e rac02.
Nesta etapa podems ignorar a execução do script root.sh e deixar para fazê-lo apenas quando for trocar o GI Home (na janela).
2) DB Home
2.1) Com usuário oracle, crie o diretório do novo Oracle Home em todos os nodes:
[oracle@rac01]$ mkdir -p /u01/app/oracle/product/19.0.0.0/db_2 [oracle@rac02]$ mkdir -p /u01/app/oracle/product/19.0.0.0/db_2
2.2) Descompacte o binário do RDBMS no novo Oracle Home (apenas no node 1):
[oracle@rac01]$ cd /u01/app/oracle/product/19.0.0.0/db_2 [oracle@rac01 db_2]$ unzip -qo /u01/patches/LINUX.X64_193000_db_home.zip -d .
2.3 Atualize o OPatch no novo ORACLE_HOME (apenas no node 1):
[oracle@rac01 db_2]$ rm -rf OPatch/ [oracle@rac01 db_2]$ unzip -qo /u01/patches/p6880880_190000_Linux-x86-64.zip -d .
2.4) Identifique os grupos de SO utilizados na instalação do ORACLE_HOME atual:
[oracle@rac01 db_2]$ export OLD_HOME=/u01/app/oracle/product/19.0.0.0/db_1 [oracle@rac01 db_2]$ grep define $OLD_HOME/rdbms/lib/config.c
Exemplo
/* SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access. */
#define SS_DBA_GRP "dba"
#define SS_OPER_GRP ""
#define SS_ASM_GRP ""
#define SS_BKP_GRP "dba"
#define SS_DGD_GRP "dba"
#define SS_KMT_GRP "dba"
#define SS_RAC_GRP "dba"
Neste exemplo, o grupo dba foi utilizado para todas as opções.
2.5) Inicie o runInstaller usando -applyRU e -applyOneOffs, da mesma forma que usou com o Grid:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/db_2
export ORA_INVENTORY=/u01/app/oraInventory
$ORACLE_HOME/runInstaller -waitforcompletion -force -silent \
-applyRU /u01/patches/35319490 \
-applyOneOffs /u01/patches/35755646,/u01/patches/35336174 \
ORACLE_BASE=${ORACLE_BASE} \
-responseFile ${ORACLE_HOME}/install/response/db_install.rsp \
oracle.install.option=INSTALL_DB_SWONLY \
INVENTORY_LOCATION=/u01/app/oraInventory \
ORACLE_HOME=${ORACLE_HOME} \
UNIX_GROUP_NAME=oinstall \
oracle.install.db.OSDGDBA_GROUP=dba \
oracle.install.db.OSKMDBA_GROUP=dba \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSOPER_GROUP=dba \
oracle.install.db.OSBACKUPDBA_GROUP=dba \
oracle.install.db.OSDGDBA_GROUP=dba \
oracle.install.db.OSKMDBA_GROUP=dba \
oracle.install.db.OSRACDBA_GROUP=dba \
oracle.install.db.CLUSTER_NODES=rac01,rac02 \
DECLINE_SECURITY_UPDATES=true
Exemplo:
[oracle@rac01 db_2]$ export ORACLE_BASE=/u01/app/oracle
[oracle@rac01 db_2]$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/db_2
[oracle@rac01 db_2]$ export ORA_INVENTORY=/u01/app/oraInventory/
[oracle@rac01 db_2]$ $ORACLE_HOME/runInstaller -waitforcompletion -force -silent \
> -applyRU /u01/patches/35319490 \
> -applyOneOffs /u01/patches/35755646,/u01/patches/35336174 \
> ORACLE_BASE=${ORACLE_BASE} \
> -responseFile ${ORACLE_HOME}/install/response/db_install.rsp \
> oracle.install.option=INSTALL_DB_SWONLY \
> INVENTORY_LOCATION=/u01/app/oraInventory \
> ORACLE_HOME=${ORACLE_HOME} \
> UNIX_GROUP_NAME=oinstall \
> oracle.install.db.OSDGDBA_GROUP=dba \
> oracle.install.db.OSKMDBA_GROUP=dba \
> oracle.install.db.InstallEdition=EE \
> oracle.install.db.OSDBA_GROUP=dba \
> oracle.install.db.OSOPER_GROUP=dba \
> oracle.install.db.OSBACKUPDBA_GROUP=dba \
> oracle.install.db.OSDGDBA_GROUP=dba \
> oracle.install.db.OSKMDBA_GROUP=dba \
> oracle.install.db.OSRACDBA_GROUP=dba \
> oracle.install.db.CLUSTER_NODES=rac01,rac02 \
> DECLINE_SECURITY_UPDATES=true
Preparing the home to patch...
Applying the patch /u01/patches/35319490...
Successfully applied the patch.
Applying the patch /u01/patches/35755646...
Successfully applied the patch.
Applying the patch /u01/patches/35336174...
Successfully applied the patch.
The log can be found at: /u01/app/oraInventory/logs/InstallActions2023-09-25_10-45-40PM/installerPatchActions_2023-09-25_10-45-40PM.log
Launching Oracle Database Setup Wizard...
[WARNING] [INS-13014] Target environment does not meet some optional requirements.
CAUSE: Some of the optional prerequisites are not met. See logs for details. /u01/app/oraInventory/logs/InstallActions2023-09-25_10-45-40PM/installActions2023-09-25_10-45-40PM.log
ACTION: Identify the list of failed prerequisite checks from the log: /u01/app/oraInventory/logs/InstallActions2023-09-25_10-45-40PM/installActions2023-09-25_10-45-40PM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the prerequisites and fix it manually.
The response file for this session can be found at:
/u01/app/oracle/product/19.0.0.0/db_2/install/response/db_2023-09-25_10-45-40PM.rsp
You can find the log of this install session at:
/u01/app/oraInventory/logs/InstallActions2023-09-25_10-45-40PM/installActions2023-09-25_10-45-40PM.log
As a root user, execute the following script(s):
1. /u01/app/oracle/product/19.0.0.0/db_2/root.sh
Execute /u01/app/oracle/product/19.0.0.0/db_2/root.sh on the following nodes:
[rac01, rac02]
Successfully Setup Software with warning(s).
2.6) Para o RDBMS, execute o script com root em todos os nodes logo após a instalação:
[root@rac01 ~]# /u01/app/oracle/product/19.0.0.0/db_2/root.sh
[root@rac02 ~]# /u01/app/oracle/product/19.0.0.0/db_2/root.sh
2.7) Copie os arquivos de configuração do ORACLE_HOME original para o novo (faça isso em todos os nodes):
export OLD_HOME=/u01/app/oracle/product/19.0.0.0/db_1 export NEW_HOME=/u01/app/oracle/product/19.0.0.0/db_2 cp -r $OLD_HOME/network/admin/* $NEW_HOME/network/admin/ cp -r $OLD_HOME/dbs/* $NEW_HOME/dbs/
3) Janela de Manutenção (Restart)
Essas são as etapas que são executadas dentro da janela de manuntenção, é partir daqui que o cluster será reiniciado em modo rolling (um node por vez).
3.1) Modifique a configuração do (s) banco de dados para utilizar o novo Oracle Home, esta etapa precisa ser executada apenas uma vez em um dos nodes do cluster.
Exemplo com 2 bancos (orcl e cdbsec) que compartilham o mesmo Oracle Home:
srvctl modify database -db orcl -oraclehome /u01/app/oracle/product/19.0.0.0/db_2 srvctl modify database -db cdbsec -oraclehome /u01/app/oracle/product/19.0.0.0/db_2
Neste momento as instâncias continuam online no Oracle Home original e serão iniciadas no Oracle Home novo no próximo restart.
O próximo restart ocorrerá automaticamente quando invocarmos o switchGiHome, o qual faz stop do CRS no Grid Home atual e start do CRS no Grid Home novo já reconfigurado, iniciando todos os serviços do node, incluindo o RDBMS no seu novo Oracle Home.
3.2) Switch para os novos binários (do GRID Home explicitamente e RDBMS implicitamente):
Node 1:
Com grid owner (note o hostname = rac01):
[grid@rac01]$ export ORACLE_HOME=/u01/app/product/19.0.0.0/grid_home2 [grid@rac01]$ $ORACLE_HOME/gridSetup.sh -silent -switchGridHome ORACLE_HOME=$ORACLE_HOME oracle.install.crs.config.clusterNodes=rac01
Com root, execute o script root.sh e não interrompa o comando até a sua conclusão (leva alguns minutos):
[root@rac01 ~]# /u01/app/product/19.0.0.0/grid_home2/root.sh
É neste momento que ocorre a reconfiguração e restart do Clusterware neste node.
OPCIONAL: Após concluir essa etapa com sucesso (verificando arquivo de log), faça uma validação básica para confirmar que todos os serviços do cluster estão em seu estado esperado antes de prosseguir para o próxmo node:
$ORACLE_HOME/bin/crsctl stat res -t
Node 2
Com grid owner (note o hostname = rac02):
[grid@rac02]$ export ORACLE_HOME=/u01/app/product/19.0.0.0/grid_home2 [grid@rac02]$ $ORACLE_HOME/gridSetup.sh -silent -switchGridHome ORACLE_HOME=$ORACLE_HOME oracle.install.crs.config.clusterNodes=rac02
Com root:
[root@rac02 ~]# /u01/app/product/19.0.0.0/grid_home2/root.sh
Repita essas duas etapas até o último node.
Exemplo Node 1
Sessão ssh 1 – com grid: Início do switch
[grid@rac01 ~]$ export ORACLE_HOME=/u01/app/product/19.0.0.0/grid_home2
[grid@rac01 ~]$ $ORACLE_HOME/gridSetup.sh -silent -switchGridHome ORACLE_HOME=$ORACLE_HOME oracle.install.crs.config.clusterNodes=rac01
Launching Oracle Grid Infrastructure Setup Wizard...
As a root user, execute the following script(s):
1. /u01/app/product/19.0.0.0/grid_home2/root.sh
Execute /u01/app/product/19.0.0.0/grid_home2/root.sh on the following nodes:
[rac01]
You can find the log of this install session at:
/u01/app/oraInventory/logs/UpdateNodeList2023-09-25_11-10-41PM.log
You can find the log of this install session at:
/u01/app/oraInventory/logs/UpdateNodeList2023-09-25_11-10-41PM.log
Successfully Setup Software.
Sessão ssh 2 – com root: Execução do script
[root@rac02 ~]# /u01/app/product/19.0.0.0/grid_home2/root.sh Check /u01/app/product/19.0.0.0/grid_home2/install/root_rac02_2023-09-25_23-16-59-381727023.log for the output of root script
Sessão ssh 3 – com root: Monitoramento do log
[root@rac01 ~]# tail -100f /u01/app/product/19.0.0.0/grid_home2/install/root_rac01_2023-09-25_23-11-28-799993173.log
Performing root user operation.
The following environment variables are set as:
ORACLE_OWNER= grid
ORACLE_HOME= /u01/app/product/19.0.0.0/grid_home2
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Relinking oracle with rac_on option
LD_LIBRARY_PATH='/u01/app/product/19.0.0.0/grid/lib:/u01/app/product/19.0.0.0/grid_home2/lib:'
Using configuration parameter file: /u01/app/product/19.0.0.0/grid_home2/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/grid/crsdata/rac01/crsconfig/rootcrs_rac01_2023-09-25_11-11-44PM.log
Using configuration parameter file: /u01/app/product/19.0.0.0/grid_home2/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/grid/crsdata/rac01/crsconfig/crs_prepatch_apply_oop_rac01_2023-09-25_11-11-45PM.log
2023/09/25 23:11:59 CLSRSC-671: Pre-patch steps for patching GI home successfully completed.
Using configuration parameter file: /u01/app/product/19.0.0.0/grid_home2/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/grid/crsdata/rac01/crsconfig/crs_postpatch_apply_oop_rac01_2023-09-25_11-12-00PM.log
Oracle Clusterware active version on the cluster is [19.0.0.0.0]. The cluster upgrade state is [NORMAL]. The cluster active patch level is [3998055650].
2023/09/25 23:12:51 CLSRSC-329: Replacing Clusterware entries in file 'oracle-ohasd.service'
Oracle Clusterware active version on the cluster is [19.0.0.0.0]. The cluster upgrade state is [ROLLING PATCH]. The cluster active patch level is [3998055650].
2023/09/25 23:15:16 CLSRSC-4015: Performing install or upgrade action for Oracle Trace File Analyzer (TFA) Collector.
2023/09/25 23:15:16 CLSRSC-4012: Shutting down Oracle Trace File Analyzer (TFA) Collector.
2023/09/25 23:15:24 CLSRSC-4013: Successfully shut down Oracle Trace File Analyzer (TFA) Collector.
2023/09/25 23:15:24 CLSRSC-672: Post-patch steps for patching GI home successfully completed.
2023/09/25 23:15:25 CLSRSC-4003: Successfully patched Oracle Trace File Analyzer (TFA) Collector.
Exemplo Node 2:
Sessão ssh 1 – com grid
[grid@rac02 ~]$ export ORACLE_HOME=/u01/app/product/19.0.0.0/grid_home2
[grid@rac02 ~]$ $ORACLE_HOME/gridSetup.sh -silent -switchGridHome ORACLE_HOME=$ORACLE_HOME oracle.install.crs.config.clusterNodes=rac02
Launching Oracle Grid Infrastructure Setup Wizard...
As a root user, execute the following script(s):
1. /u01/app/product/19.0.0.0/grid_home2/root.sh
Execute /u01/app/product/19.0.0.0/grid_home2/root.sh on the following nodes:
[rac02]
You can find the log of this install session at:
/u01/app/oraInventory/logs/UpdateNodeList2023-09-25_11-16-39PM.log
You can find the log of this install session at:
/u01/app/oraInventory/logs/UpdateNodeList2023-09-25_11-16-39PM.log
Successfully Setup Software.
Sessão ssh 2 – com root
[root@rac02 ~]# /u01/app/product/19.0.0.0/grid_home2/root.sh Check /u01/app/product/19.0.0.0/grid_home2/install/root_rac02_2023-09-25_23-16-59-381727023.log for the output of root script
Sessão ssh 3 – com root
[root@rac02 ~]# tail -100f /u01/app/product/19.0.0.0/grid_home2/install/root_rac02_2023-09-25_23-16-59-381727023.log
Performing root user operation.
The following environment variables are set as:
ORACLE_OWNER= grid
ORACLE_HOME= /u01/app/product/19.0.0.0/grid_home2
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Relinking oracle with rac_on option
LD_LIBRARY_PATH='/u01/app/product/19.0.0.0/grid/lib:/u01/app/product/19.0.0.0/grid_home2/lib:'
Using configuration parameter file: /u01/app/product/19.0.0.0/grid_home2/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/grid/crsdata/rac02/crsconfig/rootcrs_rac02_2023-09-25_11-17-20PM.log
Using configuration parameter file: /u01/app/product/19.0.0.0/grid_home2/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/grid/crsdata/rac02/crsconfig/crs_prepatch_apply_oop_rac02_2023-09-25_11-17-20PM.log
2023/09/25 23:17:28 CLSRSC-671: Pre-patch steps for patching GI home successfully completed.
Using configuration parameter file: /u01/app/product/19.0.0.0/grid_home2/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/grid/crsdata/rac02/crsconfig/crs_postpatch_apply_oop_rac02_2023-09-25_11-17-28PM.log
Oracle Clusterware active version on the cluster is [19.0.0.0.0]. The cluster upgrade state is [ROLLING PATCH]. The cluster active patch level is [3998055650].
2023/09/25 23:18:19 CLSRSC-329: Replacing Clusterware entries in file 'oracle-ohasd.service'
Oracle Clusterware active version on the cluster is [19.0.0.0.0]. The cluster upgrade state is [NORMAL]. The cluster active patch level is [345573620].
2023/09/25 23:21:09 CLSRSC-4015: Performing install or upgrade action for Oracle Trace File Analyzer (TFA) Collector.
2023/09/25 23:21:09 CLSRSC-4012: Shutting down Oracle Trace File Analyzer (TFA) Collector.
2023/09/25 23:21:16 CLSRSC-4013: Successfully shut down Oracle Trace File Analyzer (TFA) Collector.
2023/09/25 23:21:18 CLSRSC-672: Post-patch steps for patching GI home successfully completed.
2023/09/25 23:22:59 CLSRSC-4003: Successfully patched Oracle Trace File Analyzer (TFA) Collector.
3.3) Quando todos os nodes finalizarem com sucesso, execute o datapatch para atualizar os patches no dicionário do banco de dados:
. oraenv <<< orcl1 $ORACLE_HOME/OPatch/datapatch -verbose . oraenv <<< cdbsec1 $ORACLE_HOME/OPatch/datapatch -verbose
Rollback (Restart de Volta)
Uma das principais vantagens da abordagem Out-Of-place é a simplicidade e rapidez para realizar o rollback dos patches, uma vez ue só precisamos de um restart para voltar a versão original. Na prática é o mesmo procedimento demonstrado no que precisa ser executado dentro da janela, só que apontando para o Oracle Home original.
Você pode optar entre fazer rollback de tudo (GRID e RDBMS), só do Grid, ou só do RDBMS.
Exemplo de como fazer o rollback de tudo:
1) Com usuário oracle e apenas em um dos nodes, mude o Oracle Home dos bancos de dados para o original:
srvctl modify database -db orcl -oraclehome /u01/app/oracle/product/19.0.0.0/db_1 srvctl modify database -db cdbsec -oraclehome /u01/app/oracle/product/19.0.0.0/db_1
2) Com root no node 1, defina a variável de ambiente ORACLE_HOME apontando para o GI Home original e execute o -unlock do binário (esse é o único comando que só vemos no rollback):
export ORACLE_HOME=/u01/app/product/19.0.0.0/grid $ORACLE_HOME/crs/install/rootcrs.sh -unlock -crshome $ORACLE_HOME
3) Com grid no node 1, defina a variável de ambiente ORACLE_HOME apontando para o GI Home orginal e execute o switchGiHome de volta:
export ORACLE_HOME=/u01/app/product/19.0.0.0/grid $ORACLE_HOME/gridSetup.sh -silent -switchGridHome ORACLE_HOME=$ORACLE_HOME oracle.install.crs.config.clusterNodes=rac01
4) Com root novamente, execute o script root.sh:
/u01/app/product/19.0.0.0/grid/root.sh
Repita as etapas de 2 a 4 em todos os nodes, sequencialmente, até concluir o rollback por completo.
Assim como no Apply, você verá o status do cluster alternar de NORMAL para ROLLING PATCH no primeiro node, e de ROLLING PATCH para NORMAL no último node.
Quando todos os nodes estiverem na mesma versão de RU, execute o datapatch novamente para fazer o rollback do dicionário:
. oraenv <<< orcl1 $ORACLE_HOME/OPatch/datapatch -verbose . oraenv <<< cdbsec1 $ORACLE_HOME/OPatch/datapatch -verbose
Observe que você não precisa especificar a opção -rollback, o datapatch vai detectar automaticamente a diferença entre o dicionário e o binário, e irá iniciar o rollback corretamente.
Conclusão
Este post demonstrou como atualizar um ambiente Oracle RAC com aplicando diferentes tipos de patches como RU, MRP e OneOffs, usando a abordagem Out-Of-Place tanto para o GRID quanto para o RDBMS, tirando proveito das opções disponíveis no 19c como a possibilidade de instalar um novo binário e aplicar todos os patches necessários em uma única etapa. Também nessa demonstração utilizo binários totalmente novos, baixando o base release do site da Oracle ao invés de clonar o binário existente, mas o procedimento é exatamente o mesmo se você optar por clonar o binário existente usando a opção createGoldImage.