por Casimir Saternos
Publicado en noviembre de 2005
Descubre algunos scripts básicos para instalar, ejecutar y mantener bases de datos Oracle en Linux.
Hace unos siete años, Oracle lanzó la primera base de datos comercial en Linux. Desde entonces, Oracle, Red Hat y Novell/SUSE han colaborado constantemente en la introducción de cambios en el núcleo de Linux en relación con el rendimiento de las bases de datos y las aplicaciones. Por ello, Oracle Database 10g para Linux incluye mejoras estrechamente relacionadas con el sistema operativo. Ahora más que nunca, los DBA deben tener conocimientos y experiencia en esta plataforma para administrar de la mejor manera posible los sistemas a su cargo.
Existe una división tradicional de responsabilidades entre los administradores del sistema y los administradores de bases de datos. Sin embargo, en la práctica, la diferencia no siempre es clara. Muchas tiendas de TI emplean prácticas internas que abordan las preocupaciones en la base de datos y en los niveles del sistema operativo. Y, por supuesto, Oracle Database utiliza los recursos del sistema operativo y está diseñado para interactuar estrechamente con su entorno.
Además, muchos administradores de sistemas y DBA consideran necesario o conveniente automatizar las tareas relacionadas con su trabajo. La instalación de software, la supervisión de los recursos del sistema y la gestión de los sistemas implican tareas repetitivas y propensas a errores que se abordan mejor con procesos automatizados que con procedimientos manuales.
Un método usado para automatizar tareas como la creación de scripts de shell. Los scripts de shell cumplen un rol importante en el sistema Linux desde el momento en que se instalara. Varios scripts son llamados cuando el sistema se inicia y se apaga. Las utilidades de Oracle y otros proveedores de terceros se invocan mediante scripts de shell. En tanto que se pueden desarrollar rápidamente, históricamente se han utilizado para crear prototipos de aplicaciones. Los administradores del sistema han aprovechado la funcionalidad disponible con las secuencias de comandos de shell para proporcionar soluciones que se adapten a los requisitos y a la idiosincrasia particulares de los sistemas que están bajo su control.
En este artículo, presentaré la funcionalidad disponible a través de las secuencias de comandos del shell "bash" que son relevantes para instalar, ejecutar y mantener las bases de datos Oracle en una plataforma Linux. Ten en cuenta que este artículo está diseñado para principiantes en scripts de Linux o DBA que son relativamente nuevos en Linux. La mayoría de los administradores de sistemas de Linux con experiencia no lo encontrarán útil.
¿Qué es un script de shell?
Una secuencia de comandos de shell es simplemente un archivo de texto que contiene una secuencia de comandos. Al ejecutar el archivo (o script), ejecuta los comandos incluidos. El término 'shell' se refiere simplemente a la interfaz de usuario de línea de comandos particular que se utiliza para comunicarse con el núcleo de Linux. Hay varios shells diferentes, como el shell C (csh), el shel Korn (ksh), el shell Bourne (sh) y el shell Bourne Again (bash). El shell en sí es un comando que lee líneas de un archivo o de la terminal, las interpreta y, en general, ejecuta otros comandos. El shell Bourne-Again incorpora características de los otros shells ya mencionados y es el que se utilizó para los scripts que este artículo demuestra.
La primera línea del archivo de script puede utilizarse para indicar qué shell se utilizará para ejecutar el script. Este es el significado de la primera línea que se encuentra en todos los ejemplos de script:
#!/bin/bash
¿Por qué utilizar scripts de Shell?
Dependiendo de tu formación, es posible que no veas ningún valor inmediato en los scripts de shell, ya que está relacionado con el trabajo del DBA. Si no tienes experiencia con UNIX o sistemas similares a UNIX, la gran cantidad de comandos crípticos puede ser motivo de preocupación. Por otra parte, además de ser una base de datos relacional, Oracle 10g proporciona una sólida plataforma para el procesamiento de datos dentro de la base de datos, así como varios métodos para interactuar con el sistema operativo fuera de la base de datos.
Sin embargo, hay varias razones por las que puedes adentrarte en el mundo del shell scripting, incluidas las siguientes:
Cuántono usar scripts de shell
Oracle Database incluye una funcionalidad que va más allá de la definición tradicional de un RDBMS. Como cualquier otro software, usa los recursos que le proporciona el sistema operativo, pero puede "ver" y "cambiar" su entorno en un grado mucho mayor que otro software. Las vistas fijas de SQL y Oracle proporcionan una imagen del sistema desde dentro de la base de datos, mientras que los scripts de shell proporcionan una vista del sistema desde fuera de la base de datos. Los scripts de shell no son la solución para todos los problemas.
Es importante reconocer que muchos aspectos del sistema operativo se pueden supervisar y modificar desde la base de datos. Las vistas fijas de Oracle (las vistas con un prefijo v$) se pueden utilizar para determinar el nombre del host de la máquina (v$instance) o el nombre de la plataforma en la que se ejecuta la base de datos (v$database). La ubicación y otros atributos de los archivos asociados a la base de datos también se pueden determinar de esta forma. La ubicación y otros atributos de los archivos de datos (v$datafile, dba_data_files), archivos temporales (v$tempfile, dba_temp_files), redo logs (v$logfile), archive logs (v$archived_log), y archivos de control (v$controlfile) se pueden consultar directamente desde la base de datos. Puedes determinar la información sobre el área de recuperación flash ($recovery_file_dest) desde esta vista, así como consultando algunos parámetros init.ora (db_recovery_file_dest, db_recovery_file_dest_size). También se puede consultar el estado de los procesos (v$process) y la memoria (v$sga, v$sgastat, etc.). Existen varios paquetes PL/SQL incorporados, así como la posibilidad de crear objetos de base de datos Java y C que permiten un acceso adicional al sistema operativo subyacente.
Si estás considerando la posibilidad de utilizar scripts para una tarea que requiere mucho acceso a la base de datos, es probable que los scripts no sean su mejor opción. Más adelante en este artículo, hay una descripción de cómo acceder a la base de datos utilizando SQL*Plus, pero en muchos casos es mejor abordar el problema mediante otro lenguaje.
Los siguientes gráficos resumen la información a la que se puede acceder desde la propia base de datos:
Identificación del servidor | Consulta representativa | Notas> |
---|---|---|
Nombre de host en el que se está ejecutando la instancia |
|
También puedes obtener esta información ejecutando lo siguiente desde bash:
o
|
Plataforma del sistema operativo |
|
Obtendrás información similar si ejecutas uname -s |
Ubicaciones de archivos de Oracle | Consulta representativa | Notas |
---|---|---|
Archivos de control |
|
Ubicación de los archivos de control de la base de datos. El parámetro init.ora control_files también contiene esta información. |
Archivos de datos |
|
Ubicación de los archivos de la base de datos |
Archivos temporales |
|
Ubicación de los archivos temporales de la base de datos |
Archivos de registro |
|
Ubicación de los ficheros de recuperación de datos |
Logs archivados |
|
Ubicación de los ficheros de recuperación de datos archivados. Los parámetros init.ora log_archive_dest_n también contienen esta información. La consulta no arrojará resultados si tu base de datos no está en modo Archivelog. |
Área de recuperación de flash |
|
Directorio que se utiliza en una instalación de Oracle 10g para el área de recuperación de flash. El parámetro init.ora db_recovery_file_dest también contiene esta información. |
Otros puntos de acceso en el sistema de archivos se indican por parámetros |
|
Los resultados de esta consulta pueden variar significativamente, según tu instalación y la versión de Oracle Database. Entre los parámetros que se pueden devolver se incluyen: spfile standby_archive_dest utl_file_dir background_dump_dest user_dump_dest core_dump_dest audit_file_dest dg_broker_config_file1 dg_broker_config_file2 |
Acceso programático al sistema de archivos | select directory_path from dba_directories |
El parámetro UTL_FILE_DIR de Oracle y los objetos de base de datos DIRECTORY se pueden utilizar para acceder a archivos que no forman parte del funcionamiento estándar de la base de datos. |
Procesador/Procesos | Consulta representativa | Notas |
---|---|---|
Procesos de sesión |
|
La spid se puede correlacionar con los resultados de ps-ef para comparar la información disponible en la base de datos con la información del sistema operativo para un proceso determinado. |
Procesos relacionados con el paralelismo |
|
Muchos aspectos de Oracle Database, como la carga, la consulta, la creación de objetos, la recuperación y la replicación, pueden aprovechar el paralelismo para acelerar las actividades que se pueden desglosar. El parámetro parallel_threads_per_cpu define el grado de paralelismo predeterminado de una instancia. |
Memoria | Consulta representativa | Notas |
---|---|---|
Área global del programa | select * from V$PGASTAT |
El parámetro pga_aggregate_target se usa para configurar la memoria para todas las conexiones de servidor dedicado. Las utilidades de Linux, incluidos vmstat y top, pueden usarse para controlar el uso de la memoria. |
Área global del sistema | select * from v$sga |
Los parámetros SGA_MAX_SIZE y SGA_TARGET se usan para configurar las funciones de asignación de memoria dinámica de Oracle Database 10 g. Se pueden utilizar otros parámetros para asignar manualmente la memoria para fines concretos. De nuevo, existen varias utilidades de Linux para controlar la asignación de memoria. |
Scripts de Bash
Los scripts se ejecutan como parte de un proceso automatizado (sin intervención humana) o lo hacen de forma interactiva con un usuario respondiendo a las peticiones de datos. Siempre que tengas el permiso de ejecución para un archivo, puedes ejecutarlo desde la línea de comandos escribiendo su nombre. Si no tienes permiso de ejecución de un archivo, pero tienes el permiso de lectura, puedes ejecutar el script precedido por sh
.
Si un script está diseñado para ejecutarse sin la intervención del usuario, existen varias opciones para llamarlo. Puedes ejecutar un script en segundo plano y continuar incluso sin conexión, introduciendo un comando de la siguiente manera:
nohup /path_to_dir/myscript_here.sh &
Esto puede ser útil para ejecutar scripts que tardan mucho en completarse. El comando at
puede utilizarse para ejecutar un script en el futuro, y cron
puede utilizarse para programar scripts para que se ejecuten de manera recurrente.
Los siguientes ejemplos abarcan los aspectos esenciales de proporcionar salida para ver (mediante echo
) bucles, lógica condicional y asignación de variables.
print_args.sh. Los argumentos son palabras a la derecha del nombre del comando que se transfieren al script. Para acceder al primer parámetro, usa la variable $1
. La variable $0
contiene el nombre del script. La variable $#
contiene el número de argumentos en el script. Una forma práctica de iterar en todos los parámetros transferidos implica el uso de un bucle while
y el comando shift. Este comando te permite iterar a través de todos los argumentos de la lista de argumentos (en lugar de permanecer en un bucle infinito).
while [ $# -ne 0 ]
do
echo $1
shift
done
Si el script toma un nombre de archivo como argumento (o solicita al usuario un nombre de archivo) y el archivo se leerá más adelante en el script, es aconsejable comprobar si se puede acceder y leer. Por ejemplo, un script de recuperación que implique la selección de un archivo de control del que se ha hecho una copia de seguridad puede pedir al usuario que haga una selección que se usará más adelante en la secuencia de comandos para restaurar el archivo.
if [ ! -r $1 ]; then # not exists and is readable
echo "File $1 does not exist or is not readable."
exit;
fi
La secuencia de caracteres
if [ ! -r $1 ];
es lo que realmente ejecuta la prueba. Si el contenido entre los paréntesis se evalúa como verdadero, se ejecutarán los comandos que aparecen entre if y fi. La prueba real aparece entre los corchetes. El signo de exclamación sirve para negar la prueba que estás haciendo. La opción -r
comprueba si el archivo se puede leer. Lo que se prueba en este caso particular es el primer argumento que se transfiere al script. Con una prueba diferente ( -d
), puedes comprobar si una entrada dada es un directorio (consulta is_a_directory.sh).
do_continue.sh. Este ejemplo es una sencilla secuencia representativa de comandos que pueden usarse para leer las entradas de usuarios para distintos propósitos. Antes de ejecutar un proceso que puede dar lugar a la pérdida de datos u otros resultados no deseados en condiciones que no se pueden determinar desde el script, es aconsejable incluir una petición de datos preguntando si el usuario realmente quiere que el script ejecute el siguiente comando o comandos. En el siguiente ejemplo, se pregunta si el usuario desea continuar, lee una variable denominada doContinue
desde la línea de comandos y evalúa lo que introdujo el usuario. Si el usuario introduce cualquier cosa que no sea "y", se le informa que el script está "parando", y sale sin ejecutar el resto del script tras el final del bloque if ( fi
).
doContinue=n
echo -n "Do you really want to continue? (y/n) "
read doContinue
if [ "$doContinue" != "y" ]; then
echo "Quitting..."
exit
fi
Es urgente que solo los usuarios con los permisos y el entorno correctos ejecuten un determinado script. Una comprobación útil en un script pone a prueba al usuario que está intentando ejecutar el script. Si encierras un comando entre caracteres de comillas simples ( '), los resultados del comando se pueden devolver al script. En el siguiente ejemplo, se recupera el usuario conectado actualmente, utilizando whoami
, y muestra la fecha, utilizando el comando de fechamás adelante en el script.
echo "You are logged in as ‘whoami‘";
if [ ‘whoami‘ != "oracle" ]; then
echo "Must be logged on as oracle to run this script."
exit
fi
echo "Running script at ‘date‘"
Los scripts creados para interactuar con Oracle Database a veces requieren la introducción de información sensible, como una contraseña de la base de datos. El comando stty –echo
desactiva el eco de la pantalla, de modo que la información introducida para el comando de lectura posterior no aparecerá en la pantalla. Después de que la información confidencial se haya leído y almacenado en una variable (pw
en el ejemplo siguiente), se puede volver a activar con un stty echo.
stty -echo
echo -n "Enter the database system password: "
read pw
stty echo
Scripts de Oracle
Algunos archivos residen en una ubicación fija para una instalación de Oracle determinada. Puedes determinar el inventario de Oracle consultando el archivo /etc/oraInst.loc. El archivo /etc/oratab identifica las bases de datos (y otros programas de Oracle) instalados en el servidor.
get_inv_location.sh. Este script es un poco menos intuitivo que los de los ejemplos anteriores. Al desglosar el script en los comandos que lo componen, podrás entender mejor lo que se está logrando.
Para determinar la ubicación del inventario, vas a canalizar los resultados del comando cat (que muestra el contenido del archivo) a grep (una utilidad que imprime las líneas que coinciden con un patrón determinado). Estás buscando líneas que contengan el literal inventory_loc.
cat /etc/oraInst.loc | grep inventory_loc
Si hay más de una ubicación en el inventario debido a múltiples instalaciones, querrás excluir las líneas comentadas usando un #. La opción -v excluye las líneas que contienen el patrón especificado.
cat /etc/oraInst.loc |grep -v "#"|grep inventory_loc
El resultado de este comando tendrá un aspecto similar a este:
inventory_loc=/u01/oraInventory
Puedes redireccionar la salida estándar a un archivo, mediante la redirección >. Si el archivo no existe, se crea. Si existe, se sobrescribe.
cat /etc/oraInst.loc|grep -v "#"|grep inventory_loc > tmp
Una vez que tengas el registro que indica la ubicación del inventario, querrás eliminar la parte del registro anterior al signo de igualdad. En esta ocasión, los resultados del comando cat se transfieren a awk (un lenguaje de escaneo y procesamiento de patrones que se utiliza a menudo para dividir campos de longitud variable), que esencialmente tokeniza la cadena. La opción –F
indica a awk que utilice el signo de igualdad como delimitador. A continuación, se imprime el segundo token de esta cadena ($2
), que es todo lo que está a la derecha del signo de igualdad. El resultado es la ubicación de nuestro inventario (/u01/oraInventory).
cat tmp | awk -F= '{print $2}'
No hay ninguna razón en particular para permitir que el archivo temporal (tmp) permanezca, por lo que puede eliminarse.
rm tmp
list_oracle_homes.sh. Si deseas determinar el ORACLE_HOME para una base de datos determinada, tienes varias opciones. Puedes entrar como el usuario de la base de datos y reflejar (echo
) la variable $ORACLE_HOME. También puedes buscar en el archivo /etc/oratab y seleccionar el nombre asociado a una instancia determinada. Las entradas de la base de datos en este archivo tienen la forma
$ORACLE_SID:$ORACLE_HOME:<N|Y>:
La siguiente línea imprime el ORACLE_HOME de una entrada con ORACLE_SID de TESTDB:
cat /etc/oratab | awk -F: '{if ($1=="TESTDB") print $2 }'
Sin embargo, ¿qué sucede si tienes un requisito que requiere que se realice una operación en cada ORACLE_HOME enumerado en el archivo /etc/orainst? Puedes iterar a través de dicha lista utilizando el siguiente fragmento de código.
dblist=‘cat /etc/oratab | grep -v "#" | awk -F: '{print $2 }'‘
for ohome in $dblist ; do
echo $ohome
done
La variable dblist
está siendo utilizada como una matriz. Todas las rutas ORACLE_HOME están retenidas por esta variable. Un bucle for
se utiliza para iterar a través de esta lista, y cada entrada se asigna a la variable ohome
y luego se refleja a la salida estándar.
search_log.sh. Los productos de Oracle generan una variedad de logs, y te podría interesar supervisarlos. El registro de alertas de la base de datos contiene mensajes que son críticos para las operaciones de la base de datos. También se generan archivos de registro cuando se instalan o desinstalan productos y cuando se aplican parches. El siguiente script itera sobre un archivo transferido como argumento. Si se encuentra alguna línea que contenga ORA-, se envía un mensaje de correo electrónico a un destinatario designado.
cat $1 | grep ORA- > alert.err
if [ ‘cat alert.err|wc -l‘ -gt 0 ]
then
mail -s "$0 $1 Errors" administrator@yourcompany.com < alert.err
fi
La prueba específica que se realiza es un recuento del número de palabras que existen en el archivo alert.err, que se escribe cuando se redirige a alert.err. Si el recuento de palabras (wc
) es mayor que (-gt
) cero, se ejecutará el contenido del bloque if. En este caso, se usa mail
(también se puede utilizar send mail
) para enviar un mensaje. El título del mensaje contiene el script que se está ejecutando ($0
), el nombre del registro que se está buscando ($1
) y las líneas que coinciden con nuestra búsqueda inicial (ORA-
) como cuerpo del mensaje.
Las variables del entorno como ORACLE_HOME, ORACLE_BASE, y ORACLE_SID se pueden utilizar para localizar recursos que no se hallan en una ubicación fija en el entorno Linux. Si está administrando una instancia de aplicación de Oracle E-Business Suite 11i, hay muchas otras variables del entorno que se pueden utilizar para localizar recursos. Entre estas se incluyen APPL_TOP, TWO_TASK, CONTEXT_NAME, y CONTEXT_FILE, por nombrar algunas. Para ver una lista completa en tu entorno, ejecuta el siguiente comando y examina el archivo resultante (myenv.txt):
env > myenv.txt
Se pueden utilizar varias combinaciones de estas variables de entorno como la ubicación de un archivo que se está buscando. Por ejemplo, una ubicación de registro de alertas podría designarse como
$ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log
Basándose en los principios introducidos en este script, se puede escribir uno más grande y programarlo para que se ejecute a intervalos periódicos, que buscará el contenido del registro de alertas (u otro archivo de interés) y enviará un correo electrónico si existe algún error. A continuación, el contenido del registro puede trasladarse a otro archivo, de modo que solo se envíen por correo electrónico los mensajes de error más recientes.
Scripts de Oracle Recovery Manager. Oracle Recovery Manager (RMAN) es una utilidad que se puede utilizar para administrar las copias de seguridad y la recuperación de la base de datos. Esto simplifica mucho la administración en múltiples plataformas, ya que todos los scripts de copia de seguridad pueden escribirse para ser ejecutados por RMAN, reduciendo la cantidad de código específico de la plataforma. El sistema operativo subyacente puede llamar a RMAN y transferir un script. Por ejemplo, una copia de seguridad en frío (cold.sh) podría constar del siguiente script:
#!/bin/bash
rman target / <<EOF
shutdown immediate;
startup mount;
backup spfile;
backup database;
alter database open;
delete noprompt obsolete;
quit;
EOF
La línea 1 indica que está utilizando el shell bash. La línea 2 llama al Oracle Recovery Manager y especifica el inicio de sesión del usuario del sistema operativo en la base de datos de destino (especificado en la variable de entorno $ORACLE_SID). El código <<EOF
que aparece a continuación indica que los comandos posteriores se transferirán a RMAN para su procesamiento. El EOF de la última línea indica que se ha llegado al final de la serie de comandos que se van a transferir a RMAN. A continuación, se utiliza RMAN para cerrar la base de datos, arrancar y montar la base de datos, y proceder a la copia de seguridad del archivo de parámetros del servidor y del contenido de la base de datos. Entonces, se abre la base de datos. Las copias de seguridad más antiguas que las especificadas en la política de retención se eliminan. Consulta la documentación de RMAN para crear una copia de seguridad relevante para tu situación.
Las copias de seguridad nocturna se suelen programar y ejecutar automáticamente. Se podría llamar al script anterior y enviar el contenido de la salida estándar a una dirección de correo electrónico con el siguiente comando:
sh cold.sh | mail -s"Backup ‘date‘" administrator@yourcompany.com
Otras utilidades de Oracle también se pueden ejecutar desde scripts de shell. La utilidad tnsping se puede utilizar para ver si un identificador de conexión de Oracle determinado puede ponerse en contacto con el listener. Puedes ejecutar esta utilidad para comprobar si hay problemas de conexión:
tnsping ptch04 |grep TNS-
Las exportaciones e importaciones de bases de datos (tradicionales y de bombas de datos) también son buenos candidatos para la creación de scripts de procesos repetitivos.
Instalación de la base de datos. Muchos de los pasos que incluye la configuración de una base de datos se pueden automatizar. Antes de instalar Oracle 10g en Linux, debes ejecutar varias pruebas para verificar la versión mínima requerida de los paquetes y la configuración de los parámetros del núcleo. Puedes consultar la versión de un paquete mediante el comando rpm
con la opción –q
.
rpm -q compat-libstdc++
Puedes determinar varios aspectos del sistema consultando el sistema de archivos /proc "virtual" o "pseudo". No contiene archivos reales, sino más bien información del tiempo de ejecución del sistema que se puede ver como si residiera en archivos. Por ejemplo, /proc/meminfo contiene información de memoria para el sistema, y el grep MemTotal /proc/meminfo
muestra la memoria total del sistema. Al utilizar awk
como se hizo anteriormente, puedes aislar la cantidad de memoria en kilobytes mediante:
grep MemTotal /proc/meminfo | awk '{print $2}'
Dicho comando se puede utilizar en el contexto de una secuencia de comandos que realice comparaciones y responda en consecuencia (incluso actualizando el propio sistema). Los scripts de ejemplo 10gchecks_kernel.sh y 10gchecks.sh simplemente muestran las versiones actuales y recomendadas, y la configuración basada en la documentación de Oracle.
Control de la base de datos. El comando ps
se puede utilizar para informar el estado del proceso y para comprobar si se está ejecutando una base de datos, un listener, un script o cualquier otro proceso de interés. Si deseas mostrar todas las bases de datos que se están ejecutando actualmente en un servidor, puedes ejecutar el siguiente comando:
echo "‘ps -ef | grep smon|grep -v grep|awk '{print $8}'| awk -F \"_\" '{print$3}'‘"
Aunque esto es funcional, es un poco difícil de entender a primera vista. El primer comando, ps
(con las opciones -ef
para una lista completa de todos los procesos), busca todos los procesos que se ejecutan en el servidor. El siguiente, grep
, busca SMON (el proceso en segundo plano de Oracle System Monitor), que indica que la base de datos se está ejecutando. Quieres eliminar entradas que hacen referencia al propio comando grep, que se está ejecutando. A continuación, utiliza awk
para localizar la octava columna en la lista, que contiene el nombre del proceso de supervisión del sistema con el formato ora_smon_<oracle_sid>. La última instancia de awk utiliza el carácter de guion bajo como delimitador para buscar e imprimir el nombre de la base de datos que posee el proceso SMON. El guion bajo debe aparecer entre comillas, y la barra invertida se utiliza antes de cada una de las comillas para escapar de esas comillas (porque toda la cadena aparece entre un juego de comillas dobles).
exec_sql.sh. Como se ha mencionado anteriormente, es posible consultar la base de datos desde un script de shell siempre que el usuario tenga acceso a sqlplus. El siguiente ejemplo arroja una lista (delimitada por espacios) de máquinas que actualmente mantienen sesiones en la base de datos:
#!/bin/bash
output=‘sqlplus -s "/ as sysdba" <<EOF
set heading off feedback off verify off
select distinct machine from v\\$session;
exit
EOF
‘
echo $output
Este script es similar al anterior script de RMAN en el que estás introduciendo comandos en otro programa. Se realiza una conexión autenticada del sistema operativo local a la base de datos como sysdba. Para evitar que se devuelvan mensajes extraños, este script desactiva la cabecera, los comentarios y las opciones de verificación de SQL*Plus. Se ejecuta la consulta y se sale de SQL*Plus.
Observa la barra invertida doble antes del signo de dólar en el nombre de la vista. Son secuencias de escape obligatorias dentro de la cadena: La primera barra escapa a la segunda barra, que escapa al signo de dólar. De nuevo, no es bonito, pero es funcional.
Como se mencionó anteriormente, si vas a escribir algo que requiera un amplio acceso a la base de datos, los scripts de shell no son la mejor opción. Podría ser mejor reescribir el script en PL/SQL, Perl (que utiliza una sintaxis similar a la del shell scripting), Python, Java u otro lenguaje de tu elección.
Conclusión
Los scripts de shell pueden ser una herramienta eficaz para automatizar rápidamente las tareas de administración repetitivas y propensas a errores. Los ejemplos de este artículo proporcionan una introducción a las posibilidades disponibles, pero están lejos de ser exhaustivos. Cada sistema tiene distintas peculiaridades y faltas y una configuración única. Un administrador desarrollará soluciones únicas para satisfacer las necesidades de un sistema concreto.
Casimir Saternos es un DBA certificado por Oracle, un desarrollador empresarial certificado por IBM y un programador Java certificado por Sun con sede en Allentown, PA.