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

ALTER USER IDENTIFIED BY VALUES

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

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