Buenas a todos!
Este post pode ser um pouco passado para muitos DBAs, mas para quem está começando e planeja automatizar algumas tarefas, as dicas aqui pode ser de extrema utilidade!
Antes de começar, atente-se que o post é dividido em duas partes:
– Criando scripts sqlplus e rman para Windows;
– Criando scripts sqlplus e rman para Linux;
Dividimos desta maneira devido a limitações de cada ambiente.
Vamos começar!
CRIANDO SCRIPTS SQL*PLUS E RMAN PARA WINDOWS
Veja o exemplo de script que montei abaixo
Neste script, escrevemos uma série de comando SQL agrupados por ‘()’ e os enviamos por pipe ( ‘|’ ) para o sqlplus.
Com isto teremos um resultado como:
Simples não?
OMITINDO E EXIBINDO APENAS AS INFORMAÇÕES IMPORTANTES
No exemplo acima, observe a série de textos exibidos pelo SQLPLUS. As vezes estes textos podem atrapalhar o fluxo de seu script ou mesmo inviabilizá-lo.
Que tal reformularmos?
E como resultado, omitiremos todas as informações exibidas pelo SQLPLUS ( observe o -s ) e omitiremos o header da coluna selecionada ( observe o set pagesize 0; )
Resultado:
SE VOCÊ QUISER USAR UM SCRIPT PARA RMAN, SIGA O MESMO PRINCÍPIO E SUBSTITUA O SQLPLUS -S /NOLOG POR ALGO COMO RMAN TARGET /.
CRIANDO SCRIPTS SQLPLUS E RMAN PARA LINUX
Vamos nos inspirar no exemplo anterior e montar um sql que exiba “1“:
Explicando a extrutura:
Todo o bloco agrupado dentro das tags _EOF será digitado ao abrir o comando SQLPLUS. Inclusive as quebras de linha e caracteres especiais.
No exemplo acima usei _EOF mas poderia ser algo como HOUHOUHOU
Observe:
Como já usei -s e set pagesize 0; o resultado deste script será apenas:
Simples não?
POR QUE USAR ESTA MODELAGEM DE SCRIPT E NÃO USAR O @<SCRIPT.SQL>?
Com a abordagem proposta acima, podemos usar variáveis de ambiente ou personalizar o script dinamicamente.
Observe um exemplo de uso de scripts:
Dropando usuário por parametro
Observe o uso de variáveis dentro do script. Com isto, podemos fazer scripts que busquem archives via ftp de outros servidores e os apliquem num ambiente, que façamos backups customizados ou replicação de usuários para bases de testes.
Bem, espero que este artigo possa ajudar muitos administradores nesse mundão 🙂
Forte abraço a todos.
Dartanghan.
Infelizmente scripts do tipo .bat ou .cmd é muito limitado. Se voce tiver um script mais elaborado do tipo: select ‘drop table ‘ || table_name || ‘; ‘ from dba_tables; o script não entenderá o caractere || e sendo assim, não irá funcionar. Conheçe alguma dica ?
Ricardo,
Nesse caso vc pode escapar cada | ou $ no caso de uma V$SESSION, por exemplo.
sqlplus -s << _EOF
/ as sysdba
select status,instance_name from v\$instance;
exit;
_EOF
Note o "\" antes do "$"