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.

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading