Sidebar

El siguiente ejemplo muestra como podemos ejecutar comandos en nuestros scripts de unix.

#!/bin/bash
ORACLE_SID=DEV_DB
rman target / <<EOF
backup current controlfile;
EOF


Como pueden observar, lo que se quiere ejecutar debe estar encerrado entre la marca EOF, no es obligatorio usar EOF puede ser cualquier nombre pero generlamente se utiliza la palabra EOF.

Este es otro ejemplo usando sqlplus

#!/bin/bash
ORACLE_SID=DB1
sqlplus -s <<EOF
/ as sysdba
select sysdate from dual;
EOF

Capturando la salida en una variable

La siguiente técnica es utilizada para poder guardar el valor de un query en una variable y poder evaluarla posteriormente.

#/bin/bash
bloqueados=$(sqlplus -s <<EOF
usuario/password
SET HEAD OFF FEED OFF
SELECT count(*) FROM dba_users WHERE ACCOUNT_STATUS = 'LOCKED';
EXIT;
EOF)


if [ $bloqueados -ne 0 ]; then
mail -s "Existe usuarios bloqueados" This email address is being protected from spambots. You need JavaScript enabled to view it. <<EOF
Existen usuarios bloqueados.
EOF
else
  echo "No existen usuarios bloqueados."
fi


Si queremos usar una vista por ejemplo v$datafile tenemos que escapar el signo ($) dentro de nuestro script.

#!/bin/bash
valor=$(sqlplus -s << EOF
/ as sysdba
set head off
select count(*)
from v\$datafile
where status='OFFLINE';
EOF)
echo "Datafiles en offline: $nf" | mailx -s "Datafiles fuera de línea" This email address is being protected from spambots. You need JavaScript enabled to view it.

Sino escapamos el signo el signo de dolar, el shell va a tomar datafile como una variable.

Algunos comentarios útiles.

Existen dos técnicas para poder guardar el resultado de un comando en una variable.

  • $(comando)
  • `Comando`

Por ejemplo si queremos guardar el valor del server en una variable podemos hacerlo de cualquiera de estas dos formas

servidor=$(uname -a | awk '{print$2}')

o

servidor=`uname -a | awk '{print$2}'`


Tips BD