Quando comecei usar Oracle Fleet Patching and Provisioning, o processo que usava para criar uma Gold Image nova era aplicar o novo RU em algum ambiente de teste normalmente usando a abordagem in-place e depois importava a Gold Image a partir dele. Isso foi em um época em que eu clonava o GI / DB Home existente do servidor quando ia aplicar patch Out-Of-Place. No meu contexto mais recente, eu sempre tenho criado um novo Oracle Home usando o Base Release do GRID / DB e aplicado o último RU, deixando o binário mais limpo possível.
Para atender essa abordagem em casos de uso com FPP, eu montei o procedimento abaixo que consiste em criar um GRID e um RDBMS Home temporário apenas para fins de preparação da nova Gold Image. Este procedimento pode ser executado em um servidor isolado ou no próprio FPP Server.
O exemplo deste post é executado no próprio FPP Server.
1) Criando Gold Image do GRID
1.1) Se for a primeira vez executando essa abordagem, crie o diretório de template com usuário root e altere a permissão para o grid owner:
[root@fppserver ~]# mkdir -p /u01/template/ [root@fppserver ~]# chown -R grid.oinstall /u01/template/
1.2) Garanta que as variáveis de ambiente ORACLE_HOME e ORACLE_BASE não estão setadas, e defina variáveis de ambiente temporárias para essa atividade:
export ORACLE_HOME= export ORACLE_BASE= export TEMP_ORACLE_BASE=/u01/template/oracle_temp export TEMP_ORACLE_HOME=/u01/template/19.0.0/gi_gold
1.3) Se não for a primeira vez executando esse processo, remova o Oracle Home atual:
$TEMP_ORACLE_HOME/oui/bin/runInstaller -silent -waitforcompletion -detachHome ORACLE_HOME=$TEMP_ORACLE_HOME -local -ignoreSysPrereqs rm -rf $TEMP_ORACLE_HOME
1.4) Crie o diretório do Oracle Home temporário:
mkdir -p $TEMP_ORACLE_HOME
1.4.1) Descompacte o binário do GRID no GI home temporário:
unzip -qo /patches/LINUX.X64_193000_grid_home.zip -d $TEMP_ORACLE_HOME
1.4.2) Atualize o OPatch no GI Home temporário:
rm -rf $TEMP_ORACLE_HOME/OPatch unzip -qo /patches/p6880880_190000_Linux-x86-64.zip -d $TEMP_ORACLE_HOME
1.5) Descompacte o RU que será usado para criar a Gold Image. Neste exemplo é o GI 19.22 (JAN2024):
unzip -qo p36031453_190000_Linux-x86-64.zip
1.6) Execute a instalação do GRID com a opção -applyRU em modo silent (ajuste os grupos de SO conforme padrão do ambiente):
export RU_DIR=/patches/36031453/35940989 $TEMP_ORACLE_HOME/gridSetup.sh -ignorePrereq -waitforcompletion -silent \ -applyRU $RU_DIR \ -responseFile $TEMP_ORACLE_HOME/install/response/gridsetup.rsp \ INVENTORY_LOCATION=/u01/app/oraInventory \ SELECTED_LANGUAGES=en \ oracle.install.option=CRS_SWONLY \ ORACLE_BASE=$TEMP_ORACLE_BASE \ ORACLE_HOME=$TEMP_ORACLE_HOME \ oracle.install.asm.OSDBA=oinstall \ oracle.install.asm.OSOPER=oinstall \ oracle.install.asm.OSASM=oinstall \ oracle.install.crs.config.ClusterConfiguration=STANDALONE \ oracle.install.crs.config.autoConfigureClusterNodeVIP=false \ oracle.install.crs.config.clusterNodes=$(hostname -a)
1.7) Coloque os patches adicionais e opcionas que costuma aplicar em um diretório comum (JDK, OJVM, bugs que afetam o seu ambiente e que não foram incluídos no RU):
rm -rf /patches/oneoff mkdir -p /patches/oneoff unzip -qo p35949090_190000_Linux-x86-64.zip -d /patches/oneoff unzip -qo p35990282_1922000DBRU_Linux-x86-64.zip -d /patches/oneoff unzip -qo p34304965_1922000DBRU_Linux-x86-64.zip -d /patches/oneoff rm -f /patches/oneoff*.xml
1.8.1) Execute o opatchauto com a opção -analyze para os patches adicionais:
$TEMP_ORACLE_HOME/OPatch/opatchauto apply -phBaseDir /patches/oneoff -oh $TEMP_ORACLE_HOME -binary -analyze
Note o uso da opção -phBaseDir para aplicar múltiplos patches com o opatchauto.
1.8.2) Execute o opatchauto com a opção de apply e -binary:
$TEMP_ORACLE_HOME/OPatch/opatchauto apply -phBaseDir /patches/oneoff -oh $TEMP_ORACLE_HOME -binary
1.9) Agora em outra sessão com o grid owner e variáveis de ambiente corretas do FPP, crie uma Gold Image a partir do GI Home temporário que acabou de ser instalado:
Exemplo criando uma GoldImage com nome GI1922:
rhpctl import image -imagetype ORACLEGISOFTWARE -image GI1922 -path /u01/template/19.0.0/gi_gold
Se a Gold Image foi importada com sucesso, neste ponto você já pode remover o GI home temporário executando os mesmos comandos do passo 1.3.
2) Criando Gold Image do RDBMS
2.1) Mesma lógica para as variáveis de ambiente aqui, mudando apenas o caminho do Oracle Home do RDBMS:
export ORACLE_HOME= export ORACLE_BASE= export RU_DIR=/patches/36031453/35940989 export TEMP_ORACLE_BASE=/u01/template/oracle_temp export TEMP_ORACLE_HOME=/u01/template/19.0.0/db_gold
2.2) Se não for a primeira vez executando o procedimento, remova o binário e recrie o diretório:
$TEMP_ORACLE_HOME/oui/bin/runInstaller -silent -waitforcompletion -detachHome ORACLE_HOME=$TEMP_ORACLE_HOME -local -ignoreSysPrereqs rm -rf $TEMP_ORACLE_HOME mkdir -p $TEMP_ORACLE_HOME
2.3) Descompacte o binário do RDBMS no Oracle Home temporário:
unzip -qo /patches/LINUX.X64_193000_db_home.zip -d $TEMP_ORACLE_HOME
2.3.1) Atualize o OPatch no Oracle Home temporário:
rm -rf $TEMP_ORACLE_HOME/OPatch unzip -qo /patches/p6880880_190000_Linux-x86-64.zip -d $TEMP_ORACLE_HOME
2.4) Assumindo que os patches já foram descompactados na etapa do GRID, siga com a instalação do DB Home:
$TEMP_ORACLE_HOME/runInstaller -waitforcompletion -force -silent \
-applyRU $RU_DIR \
-responseFile ${TEMP_ORACLE_HOME}/install/response/db_install.rsp \
oracle.install.option=INSTALL_DB_SWONLY \
oracle.install.db.InstallEdition=EE \
INVENTORY_LOCATION=/u01/app/oraInventory \
ORACLE_BASE=${TEMP_ORACLE_BASE} \
ORACLE_HOME=${TEMP_ORACLE_HOME} \
UNIX_GROUP_NAME=oinstall \
oracle.install.db.OSDGDBA_GROUP=oinstall \
oracle.install.db.OSKMDBA_GROUP=oinstall \
oracle.install.db.OSDBA_GROUP=oinstall \
oracle.install.db.OSOPER_GROUP=oinstall \
oracle.install.db.OSBACKUPDBA_GROUP=oinstall \
oracle.install.db.OSDGDBA_GROUP=oinstall \
oracle.install.db.OSKMDBA_GROUP=oinstall \
oracle.install.db.OSRACDBA_GROUP=oinstall \
oracle.install.db.CLUSTER_NODES=$(hostname -a) \
DECLINE_SECURITY_UPDATES=true

2.5) Execute o processo de analyze dos patches adicionais com opatchauto usando a opção -phBaseDir:
$TEMP_ORACLE_HOME/OPatch/opatchauto apply -phBaseDir /patches/oneoff -oh $TEMP_ORACLE_HOME -binary -analyze

2.6) Siga com apply dos patches adicionais (assumindo que o analyze concluiu com sucesso):
$TEMP_ORACLE_HOME/OPatch/opatchauto apply -phBaseDir /patches/oneoff -oh $TEMP_ORACLE_HOME -binary
2.7) Agora em outra sessão com grid owner e variáveis de ambiente do FPP, importe a Gold Image usando o Oracle Home temporário:
rhpctl import image -imagetype ORACLEDBSOFTWARE -image DB1922 -path /u01/template/19.0.0/db_gold

Se a Gold Image foi importada com sucesso, neste ponto você já pode remover o DB home temporário executando os mesmos comandos do passo 2.2.
Se este procedimento for executado no FPP Server, a ideia demonstrada no post “Oracle Fleet Patching & Provisioning (FPP) 19c: Criando uma Gold Image Para um Novo Release Update” também poderia ser adaptada para usar essa abordagem com uma WorkingCopy temporária criada a partir de uma Gold Image do Base Release do GRID ou RDBMS. Essa abordagem adaptada teria a vantagem do tempo de execução, tirando proveito do ACFS Snapshot para provisionar o Oracle Home temporário mais rapidamente.
Conclusão
Este post demonstrou um procedimento viável para preparação de novas Gold Image para o Oracle Fleet Patching and Provisioning, tendo como objetivo principal criar Gold Image sem acumular vários RU com o decorrer do tempo, algo que a Oracle tem dado cada vez mais ênfase ultimamente, e que na prática realmente se apresenta como um método mais eficiente para atualização dos ambientes.