Em ambientes Oracle 11g, é comum precisar replicar um Oracle Home já configurado para outro servidor — seja para padronizar patches e configurações entre nós de um cluster RAC, seja para preparar um novo servidor que vai hospedar um ambiente de Data Guard. Fazer isso via clone do home, em vez de repetir a instalação do zero, garante que o binário, os patches aplicados e as configurações fiquem idênticos entre origem e destino, evitando divergências que podem gerar dor de cabeça na hora de configurar replicação ou balanceamento entre nós.
A dica de hoje é como clonar o home de um ambiente single ou rac para outro servidor, usei este procedimento para criar o home de um ambiente RAC que será um data guard.
Backup do Oracle Home existente em um servidor utilizando o usuário root:
cd /u01/app/oracle/product/11.2.0.4/
[root@01vm03 ~]$ tar -pcvf /mnt/orabkp/temp/oracle_home_11g.tar dbhome_1O backup do Oracle Home foi copiado para o servidor que receberá a nova instalação do Oracle Home.
[root@01vm03 app]# scp /mnt/orabkp/temp/oracle_home_11g.tar [email protected]:/mnt/orabkp/temp/Restauração do Oracle Home no novo servidor utilizando o usuário root:
[root@01vm03 product]# cd /u01/app/oracle/product/
[root@01vm03 product]# mkdir -p 11.2.0.4
[root@01vm03 product]# chown -R oracle:oinstall 11.2.0.4
[root@01vm03 product]# chmod -R 775 11.2.0.4/
[root@01vm03 product]# tar -pxvf /mnt/orabkp/temp/oracle_home_11g.tar -C /u01/app/oracle/product/11.2.0.4/Verifiquei o hostname do servidor onde o novo Oracle Home será configurado. Esse valor será utilizado no preenchimento das variáveis de configuração:
[root@01vm03 ~]# hostname
01vm03Se o ambiente de destino for single instance, siga o procedimento abaixo ajustando o nome do servidor na variável LOCAL_NODE:
Preencha o script com os valores do hostname na variável LOCAL_NODE, e o nome que você quer dar ao home usando a variável ORACLE_HOME_NAME:
O hostname do servidor que estou configurando é o 01vm03 e o nome do home escolhido foi o OraDb11g_home1.
[oracle@01vm03 scripts]$ cat clone_home.sh
#!/bin/sh
echo "clone_home started at `date`" | tee -a clone_home.log
/usr/bin/perl /u01/app/oracle/product/11.2.0.4/clone_home/bin/clone_home.pl ORACLE_BASE=/ora/app/oracle ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1 ORACLE_HOME_NAME=OraDb11g_home1 '-O"LOCAL_NODE=01vm03"'
echo "clone_home ended at `date`" | tee -a clone_home.log
Executando o clone e acompanhando os logs:
[oracle@01vm03 scripts]$ nohup ./clone_home.sh &
[oracle@01vm03 scripts]$ tail -f nohup.outExecute o script root.sh com o usuário root conforme solicitado:
[root@01vm03 product]# sh /u01/app/oracle/product/11.2.0.4/dbhome_1/root.shSe o ambiente de destino for Oracle RAC siga o procedimento abaixo ajustando o nome de cada servidor na variável LOCAL_NODE:
Node 1:
[root@01vm03 ~]# hostname
01vm03Preencha o script com os valores do hostname na variável LOCAL_NODE e o nome que você quer dar ao home usando a variável ORACLE_HOME_NAME:
[oracle@01vm03 scripts]$
cat clone_home.sh
#!/bin/sh
/usr/bin/perl /u01/app/oracle/product/11.2.0.4/dbhome_1/clone_home/bin/clone_home.pl '-O"CLUSTER_NODES={01vm03,02vm03}"' '-O"LOCAL_NODE=01vm03"' ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1 ORACLE_HOME_NAME=OraDb11g_home1
nohup ./clone_home.sh &Execute o script e acompanhe os logs:
[oracle@01vm03 scripts]$ nohup ./clone_home.sh &
[oracle@01vm03 scripts]$ tail -f nohup.outExecute o script conforme solicitado do root.sh:
[root@01vm03 product]# sh /u01/app/oracle/product/11.2.0.4/dbhome_1/root.shNode 2:
[root@02vm03 ~]# hostname
02vm03Preencha o script com os valores do hostname na variável LOCAL_NODE e o nome que você quer dar ao home usando a variável ORACLE_HOME_NAME:
[oracle@02vm03 scripts]$
cat clone_home.sh
#!/bin/sh
/usr/bin/perl /u01/app/oracle/product/11.2.0.4/dbhome_1/clone_home/bin/clone_home.pl '-O"CLUSTER_NODES={01vm03,02vm03}"' '-O"LOCAL_NODE=02vm03"' ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1 ORACLE_HOME_NAME=OraDb11g_home1
nohup ./clone_home.sh &Execute o script e acompanhe os logs:
[oracle@02vm03 scripts]$ nohup ./clone_home.sh &
[oracle@02vm03 scripts]$ tail -f nohup.outExecute o script conforme solicitado do root.sh:
[root@02vm03 product]# sh /u01/app/oracle/product/11.2.0.4/dbhome_1/root.shVerifiquei em ambos os servidores se o arquivo inventory.xml foi preenchido corretamente com o novo home que foi criado com base no clone:
[oracle@01vm03 scripts]$ strings /u01/app/oraInventory/ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
<SAVED_WITH>11.2.0.4.0</SAVED_WITH>
<MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraGiHome19130" LOC="/u01/app/19.0.0.0/grid" TYPE="O" IDX="1" CRS="true"/>
<HOME NAME="DbHome_7" LOC="/u01/app/oracle/product/19.0.0.0/dbhome_1" TYPE="O" IDX="2"/>
<HOME NAME="DbHome_8" LOC="/u01/app/oracle/product/12.2.0.1/dbhome_1" TYPE="O" IDX="3"/>
<HOME NAME="OraDb11g_home1" LOC="/u01/app/oracle/product/11.2.0.4/dbhome_1" TYPE="O" IDX="4">
<NODE_LIST>
<NODE NAME="01vm03"/>
<NODE NAME="02vm03"/>
</NODE_LIST>
</HOME>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>Remova os arquivos do diretório dbs dos servidores 01vm03, 02vm03:
[oracle@01vm03]$ cd /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/
[oracle@01vm03]$ rm -f *
[oracle@02vm03]$ cd /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/
[oracle@02vm03]$ rm -f *Exemplo da saída dos logs ao executar o script do clone:
[oracle@01vm03 scripts]$ tail -f nohup.out
./runInstaller -clone -waitForCompletion "CLUSTER_NODES={01vm03,02vm03}" "LOCAL_NODE=01vm03" "ORACLE_BASE=/u01/app/oracle" "ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1" "ORACLE_HOME_NAME=OraDb11g_home1" -silent -noConfig -nowait
Starting Oracle Universal Installer...
Checking swap space: must be greater than 500 MB. Actual 16345 MB Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2024-02-23_11-34-34AM. Please wait ...Oracle Universal Installer, Version 11.2.0.4.0 Production
Copyright (C) 1999, 2013, Oracle. All rights reserved.
You can find the log of this install session at:
/u01/app/oraInventory/logs/cloneActions2024-02-23_11-34-34AM.log
.................................................................................................... 100% Done.
Installation in progress (Friday, February 23, 2024 11:34:41 AM BRT)
............................................................................... 79% Done.
Install successful
Linking in progress (Friday, February 23, 2024 11:34:46 AM BRT)
Link successful
Setup in progress (Friday, February 23, 2024 11:35:14 AM BRT)
Setup successful
End of install phases.(Friday, February 23, 2024 11:35:36 AM BRT)
WARNING:
The following configuration scripts need to be executed as the "root" user in each new cluster node. Each script in the list below is followed by a list of nodes.
/u01/app/oracle/product/11.2.0.4/dbhome_1/root.sh #On nodes 01vm03
To execute the configuration scripts:
1. Open a terminal window
2. Log in as "root"
3. Run the scripts in each cluster node
The cloning of OraDb11g_home1 was successful.
Please check '/u01/app/oraInventory/logs/cloneActions2024-02-23_11-34-34AM.log' for more details.[root@01vm03 product]# sh /u01/app/oracle/product/11.2.0.4/dbhome_1/root.sh
Check /u01/app/oracle/product/11.2.0.4/dbhome_1/install/root_01vm03_2024-02-23_11-41-03.log for the output of root script
[root@01vm03 product]# cat /u01/app/oracle/product/11.2.0.4/dbhome_1/install/root_01vm03_2024-02-23_11-41-03.log
Performing root user operation for Oracle 11g
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0.4/dbhome_1
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.
Finished product-specific root actions.
Finished product-specific root actions.Após este procedimento, basta ajustar o init, spfile, tnsnames, criar os databases, registrar e seguir de acordo com a sua necessidade e ambiente.