oracle

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

(
echo connect / as sysdba
echo SELECT 1 FROM dual
echo WHERE 1=1;
echo exit
) | sqlplus /nolog

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:

SQL*Plus: Release 11.1.0.7.0 - Production on Dom Set 23 13:28:53 2012

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

SQL> Conectado.
SQL>   2
         1
----------
         1

SQL> Desconectado de Oracle Database 11g Release 11.1.0.7.0 - 64bit Production

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?

(
echo connect / as sysdba
echo set pagesize 0;
echo SELECT 1 FROM dual
echo WHERE 1=1;
echo exit
) | sqlplus -s /nolog

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:

         1

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“:

sqlplus -s << _EOF
/ as sysdba
set pagesize 0;
SELECT 1 FROM dual
WHERE 1=1;
exit;
_EOF

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:

sqlplus -s << HOUHOUHOU
/ as sysdba
set pagesize 0;
SELECT 1 FROM dual
WHERE 1=1;
exit;
HOUHOUHOU

Como já usei -s e set pagesize 0; o resultado deste script será apenas:

       1

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

NOME_DO_USUARIO='dartanghan';

echo 'Vou dropar o $NOME_DO_USUARIO!';

sqlplus -s << _EOF >> $LOG_FILE 
/ as sysdba
DROP USER $NOME_DO_USUARIO CASCADE;
exit;
_EOF

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.