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:
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")
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!
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
Postar um comentário