Script facilitador de vida - Várias bases de dados

E aí galera!?


Bom, hoje tive que criar um procedimento de desligamento para todas as bases de dados do lugar onde eu trabalho. Foi solicitado para documentação.
Pensei no trabalho que iria ser fazer um script para cada base de dados em cada servidor (e não são poucos) que fizesse o seguinte:

export ORACLE_SID=(instância1)
sqlplus / as sysdba <<EOF
shutdown immediate;
exit
EOF
export ORACLE_SID=(instância2)
sqlplus / as sysdba <<EOF
....

Criei um script onde isso poderia tornar as coisas mais fáceis e que se aplica a qualquer servidor do ambiente:
(UPDATE 17/01/2012 - Script atualizado para ignorar linhas que começam com "*" geralmente criadas quando um agente do grid control é instalado)
(UPDATE 06/03/2012 - Script reformulado, agora ele solicita o comando. É similar ao script do post "RAC EDITION")


#!/bin/bash
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


Esse script consulta o arquivo /etc/oratab que, no ambiente LINUX/UNIX, possui a lista das instâncias (criadas pelo DBCA), faz o filtro e usa como parâmetro para executar o comando dentro do FOR.

O interessante é que vários tipos de comandos podem ser utilizados nesse caso, basta ter o /etc/oratab atualizado!

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"