Script facilitador de vida - RAC Edition
Autor: Eduardo Valentim | Publicado: 2012-02-21T11:39:00-03:00

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/bashecho "Provide Node Number (RAC):"read node_numberif [ -z $node_number ]; then&nbsp;&nbsp; echo "You have to provide a valid node number (datatype number(1))"fiecho "Provide utility:"echo "SQLPLUS =&gt; 1"echo "RMAN =&gt; 2"read utilityif [ -z $utility ]; then&nbsp;&nbsp; echo "You have to provide a valid utility number (datatype number(1))"fiecho "Provide command(s):"read commands#if [ -z $commands ]; then#&nbsp;&nbsp; echo "You have to provide a valid command (datatype varchar)"#ficase $utility in&nbsp; 1) touch commands.sql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "prompt -- Output for instance &amp;_connect_identifier:" &gt; commands.sql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "$commands" &gt;&gt; commands.sql &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&lt;&lt;EOFprompt exitEOF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm commands.sql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "End of SQLPLUS execution.";;&nbsp; 2) touch commands.rman&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo $commands &gt; commands.rman&nbsp;&nbsp;&nbsp;&nbsp; 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&lt;&lt;EOFexitEOF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm commands.rman&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo "End of RMAN execution.";;esac
&nbsp;Saída:


[oracle@node2]/home/oracle$ ./exec_commands.shProvide Node Number (RAC):2Provide utility:SQLPLUS =&gt; 1RMAN =&gt; 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      
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      AMAZON2End of SQLPLUS execution.
Façam bom uso.