Script facilitador de vida - RAC Edition

Caros amigos leitores.

O trabalho é árduo e o tempo é curto. Aproveitei o carnaval para fazer umas migrações para um ambiente em RAC e como ficaram várias instâncias (por enquanto 7 por nó e vai aumentar depois) fiz um script pra executar comandos em várias bases assim como o post anterior "Script Facilitador de Vidas - Várias bases de dados". Como disse o "Grande Soldador": viu a necessidade, atenda! O script anterior era válido para instância única então fiz esse para quem trabalha com Oracle RAC.

De início o script pede o número do nó no ambiente cluster. Depois pede o utilitário para execução que cadastrei o SQLPLUS e o RMAN. Por último o comando que será executado.
Na execução, o script abaixo criará um arquivo de entrada que é chamado pelo utilitário escolhido. Podem alterar o script para adaptar a alguma necessidade como: catálogo rman, etc. Como o script anterior, usa referências no "/etc/oratab".

Sei que o GRID CONTROL, que também utilizamos, possui um recurso de executar comando em várias bases de dados, mas não fornece output, apenas se o comando deu erro ou não.

Segue abaixo o script e a saída como teste (desculpem a minha mania de colocar em inglês, prefiro pra evitar os problemas com acentos):


#!/bin/bash
echo "Provide Node Number (RAC):"
read node_number
if [ -z $node_number ]; then
   echo "You have to provide a valid node number (datatype number(1))"
fi
echo "Provide utility:"
echo "SQLPLUS => 1"
echo "RMAN => 2"
read utility
if [ -z $utility ]; then
   echo "You have to provide a valid utility number (datatype number(1))"
fi
echo "Provide command(s):"
read commands
#if [ -z $commands ]; then
#   echo "You have to provide a valid command (datatype varchar)"
#fi
case $utility in
  1) touch commands.sql
        echo "prompt -- Output for instance &_connect_identifier:" > commands.sql
        echo "$commands" >> commands.sql
         for i in `cat /etc/oratab|grep -v "^*"|sed '/^$/d'|sed '/^#/d'|sed '/^+/d'|cut -d ":" -f 1`; do `echo "export ORACLE_SID=$i$node_number"`; sqlplus -S / as sysdba @commands<<EOF
prompt
exit
EOF
         done
         rm commands.sql
         echo "End of SQLPLUS execution.";;
  2) touch commands.rman
         echo $commands > commands.rman
     for i in `cat /etc/oratab|grep -v "^*"|sed '/^$/d'|sed '/^#/d'|sed '/^+/d'|cut -d ":" -f 1`; do `echo "export ORACLE_SID=$i$node_number"`;rman catalog rman/rmancat@rman target / cmdfile=commands.rman<<EOF
exit
EOF
         done
         rm commands.rman
         echo "End of RMAN execution.";;
esac
 Saída:

[oracle@node2]/home/oracle$ ./exec_commands.sh
Provide Node Number (RAC):
2
Provide utility:
SQLPLUS => 1
RMAN => 2
1
Provide command(s):
show parameter instance_name
-- Output for instance MICROSOFT2:

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string
MICROSOFT2

-- Output for instance GOOGLE2:

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string
GOOGLE 2

-- Output for instance APPLE2:

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string
APPLE2

-- Output for instance ORACLE2:

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string
ORACLE2

-- Output for instance DATAMANAGER2:

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string
DATAMANAGER2

-- Output for instance SAP2:

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string
SAP2

-- Output for instance
AMAZON2:

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string AMAZON2

End of SQLPLUS execution.
Façam bom uso.

Comentários

Postagens mais visitadas deste blog

Evitando FULL TABLE SCANS quando usar IS NULL em cláusulas WHERE

ALTER USER IDENTIFIED BY VALUES

Restore no RMAN falha com "ORA-01180: can not create datafile 1"