Caros amigos leitores.O trabalho e arduo e o tempo e curto. Aproveitei o carnaval para fazer umas migracoes para um ambiente em RAC e como ficaram varias instancias (por enquanto 7 por no e vai aumentar depois) fiz um script pra executar comandos em varias bases assim como o post anterior "Script Facilitador de Vidas - Varias bases de dados". Como disse o "Grande Soldador": viu a necessidade, atenda! O script anterior era valido para instancia unica entao fiz esse para quem trabalha com Oracle RAC.De inicio o script pede o numero do no no ambiente cluster. Depois pede o utilitario para execucao que cadastrei o SQLPLUS e o RMAN. Por ultimo o comando que sera executado.Na execucao, o script abaixo criara um arquivo de entrada que e chamado pelo utilitario escolhido. Podem alterar o script para adaptar a alguma necessidade como: catalogo rman, etc. Como o script anterior, usa referencias no "/etc/oratab".Sei que o GRID CONTROL, que tambem utilizamos, possui um recurso de executar comando em varias bases de dados, mas nao fornece output, apenas se o comando deu erro ou nao.Segue abaixo o script e a saida como teste (desculpem a minha mania de colocar em ingles, prefiro pra evitar os problemas com acentos):#!/bin/bashecho "Provide Node Number (RAC):"read node_numberif [ -z $node_number ]; then echo "You have to provide a valid node number (datatype number(1))"fiecho "Provide utility:"echo "SQLPLUS => 1"echo "RMAN => 2"read utilityif [ -z $utility ]; then echo "You have to provide a valid utility number (datatype number(1))"fiecho "Provide command(s):"read commands#if [ -z $commands ]; then# echo "You have to provide a valid command (datatype varchar)"#ficase $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<<EOFprompt exitEOF 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<<EOFexitEOF done rm commands.rman echo "End of RMAN execution.";;esac Saida:[oracle@node2]/home/oracle$ ./exec_commands.shProvide Node Number (RAC):2Provide utility:SQLPLUS => 1RMAN => 21Provide 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 GOOGLE2-- 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 AMAZON2End of SQLPLUS execution.Facam bom uso. E ai galera!?Bom, hoje tive que criar um procedimento de desligamento para todas as bases de dados do lugar onde eu trabalho. Foi solicitado para documentacao.Pensei no trabalho que iria ser fazer um script para cada base de dados em cada servidor (e nao sao poucos) que fizesse o seguinte:export ORACLE_SID=(instancia1)sqlplus / as sysdba <<EOFshutdown immediate;exitEOFexport ORACLE_SID=(instancia2)sqlplus / as sysdba <<EOF ....Criei um script onde