Extracción de info vía sqlplus.

sqlplus

 

Te ha pasado que urge, por no decir de otra manera, extraer gran cantidad de información de una o más tablas en una DB de oracle, y los clientes gráficos demoran eternidades? Es necesario exportarla a un archivo plano … y después de 3 horas no termina? Claro, es una situación que podría ser más común de lo que creemos en ambientes donde las tablas son un poco más que inmensas.

SQL*PLUS es una herramienta en línea de comandos de oracle que nos permitirá realizar una conexión a la DB, ejecutar comandos propios de SQL y además, comandos de la herramienta propiamente dicha. Paginación, salida, formato, etc, es algo de lo que con esta herramienta se puede conseguir.

Dispone de varias opciones que nos ayudarán al formateo de nuestro reporte, éstos son algunos ejemplos y explicaré las más importantes.

 SET NEWPAGE 0; // No genera pantalla en blanco después de cada paginación.
 SET SPACE 0; //Cantidad de espacios entre cada columna
 SET PAGESIZE 0; //Tamaño de la página, si utilizas paginación.
 SET ECHO OFF;
 SET FEEDBACK OFF;
 SET VERIFY OFF;
 SET HEADING OFF; //Inactiva agregar nombres de las columnas.
 SET MARKUP HTML OFF SPOOL OFF;
 SET LINESIZE 200 TRIM ON TRIMSPOOL ON; //Establece un tanaño de línea o renglón, quizá de los parámetros más útiles.
 spool /tmp/tabla1.csv; //Manda la salida al archivo indicado.
 select * from tabla1; //Nuestro query
 spool off; //Cancela la salida de spool para futuras consultas.
 exit;

Las opciones pueden escribirse una a una en nuestro cliente, pero y que pasa si nuestra consulta demorará minutos … tal vez horas? Debe poderse ejecutar mediante un script. Eso es posible? La respuesta es si, es en realidad donde radica su mayor utilidad.

Si guardamos todo este contenido en el archivo /tmp/consulta.sql, se podrá llamar desde nuestra línea de comandos a través de:

$nohup /path/to/sqlplus usuario/password@string_conexion @/tmp/consulta.sql &

Que de manera general ejecutará el comando sqlplus con los datos establecidos por usuario y password en la entrada de tnsnames.ora llamada string_conexion y tomando como archivo de instrucciones el /tmp7consulta.sql

Nohup y & son los comandos para hacer inmune nuestro script a la señal de detención si el PID padre muere, así como mandarlo en backgroud para tener el control de nuestra consola respectivamente. Sencillo, no?

Si el string de conexion no lo tienes en tu tnsnames.ora, tendrás que ingresar todos los datos para tu conexión, incluyendo host, puerto, SID o service name, etc.


Facebook Twitter Email

Entradas relacionadas

  • Sin entradas relacionadas

También te podría gustar...

1 respuesta

  1. Angel dice:

    Hola. Estoy tratando de usar esto en 2016 y la instruccion SET NEWPAGE NONE no funciona, aparece como desconocida. Saben cual es la orden actual, ya que cuando uso el Spool me genera el archivo con una linea en blanco al principio.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *