NDICE
1. Introduccin y Objetivos --------------------------------------- Pagina 4 2. Sql*Loader -------------------------------------------------------- Pagina 5
Que es Sql Loader. Caractersticas. Funcionamiento de la Carga de Datos . Mtodos de Carga: Ruta Convencional y directa. Ficheros errneos y descartados.
6. Rellenado de columnas con datos derivado ------------------- Pagina 18 7. Cargas de datos de un fichero a varias tablas y de varios ficheros a una tabla ---------------------------------- Pagina 20
Ejemplos.
1. Introduccin y Objetivos: En este documento trabajaremos con la carga y descarga de datos desde la Version11G de Oracle, mediante linea de comando y herramientas tales como Enterprise Manager y Keep Tool 9. Se deben cumplir los siguientes objetivos:
Comprender la estructura del fichero de control de SQL*Loader. Conocer los ficheros de log de SQL*Loader Realizar cargas masivas de datos con formatos de longitud fija y variable desde la linea de comando. Rellenar columnas con datos derivados durante una carga masiva de datos. Realizar cargas de datos de un fichero a varias tablas y a una tabla desde varios ficheros. Realizar cargas de registros que cumplan determinadas condiciones. Realizar cargas de datos que incluyan campos BLOB. Volcar en un fichero de texto datos provenientes de las tablas de ORACLE usando SQL*Plus y alguna herramienta grfica (TOAD, KeepTool, IxUnload o similares). Conocer las posibilidades que ofrece Enterprise Manager para carga y descarga de datos.
2. Que es Sql*Loader?
Es una utilidad que proporciona Oracle para cargar datos desde ficheros externos a una Base de Datos ORACLE. Las tablas en las que se quiere cargar informacin deben estar creadas ya que Sql *Loader no crea tablas, y estas tablas pueden estar vacas o con datos ya incorporados.
Caractersticas:
Permite cargas desde ficheros de texto aunque tambin pueden ser binarios. Soporta varios Formatos de carga, carga selectiva, cargas multitablas. Puede utilizarse en distintas plataformas. Puede leer desde mltiple ficheros de datos en una misma sesin de carga. Puede cargar datos en diferentes tablas en una misma sesin de carga. Puede manipular ficheros de longitud fija y variable Soporta dos tipos de ruta de carga: ruta convencional y directa Permite transformacin de datos durante la carga
Sql Loader conecta con un usuario de la base de datos, se le dice cual es el fichero de texto que contiene la informacin a importar a la Base de datos y cual es el que contiene las especificaciones sobre lo que se va a hacer con esa informacin (archivo de control .CTL).
De los parmetros vistos anteriormente utilizaremos con mas frecuencia los siguientes para trabajar mediante linea de comando:
userid=usuario/contrasea@orcl Control Data log Discard bad
Mtodos de Carga:
Carga de Ruta Convencional: Por defecto es el utilizado y utiliza el parmetro INSERT y hace uso de bind array para cargar datos en las tablas de la Base de Datos. Cuando se utiliza este mtodo Sql Loader compite con el resto de los procesos por la utilizacin de los recursos del buffer y a veces puede ralentizar las cargas. Pocos los datos a cargar. Acceso a tablas que se encuentran en un Cluster Permite aplicar funciones SQL a los campos de datos. Comprueba constraints de la base de datos.
Carga de Ruta Directa: La carga de ruta directa analiza los datos de entrada con la descripcin dada en el fichero de control y convierte los campos del fichero de entrada a su correspondiente formato en los campos de las tablas de Oracle. Disminuye tiempo de carga y uso del CPU Mucha cantidad de datos a cargar. La carga convencional da error en la conversin de datos. Debe ejecutarse un Script para que la base de datos este preparada para este tipo de carga $ORACLE_HOME/rdbms/admin/catldr.sql Deshabilita contraints y triggers antes de la carga de datos. (check y foreign key) Rehabilita las contraints y triggers al terminar la carga de datos.
Ejemplo 1: sqlldr userid=usuario/contrasea@NombreBasedeDatos control=c:\carga.ctl data=c:\datos.dat Ejemplo 2: sqlldr userid=usuario/contrasea@orcl control=/RUTA/DEL/FICHEROde CONTROL.CTL data=/RUTA/DEL/FICHERO/QUE/CONTIENE/LOS/DATOS log=/RUTA/GUARDAR/LOGS bad=/A/DONDE/VAN/DATOS/RECHAZADOS .bad discard=/A/DONDE/VAN/DATOS/DESCARTADOS .dsc
Bad Files.
Los datos errneos son aquellos que no han sido insertados en las tablas de la base de datos porque no han podido ser ledos correctamente desde el fichero de datos de entrada o bien su insercin causa errores de incumplimiento de restricciones definidas en las tablas. Violacin de constraint existentes. Falta de espacio en las tablespaces.
Discard Files:
Mientras que los datos descartados no se insertan en la base de datos porque no verifican una determinada condicin que puede imponerse en el fichero de control, de manera que tan solo se inserten los datos que satisfacen dicha condicin. Si estos dos ltimos archivos no son especificados, se crearan automticamente al encontrarse datos errneos y descartados. Estos parmetros pueden pasarse bien desde la linea de comando o pueden ir incluidos dentro del fichero de control, tambin pueden ir incluidos dentro del fichero de control los datos a ser cargados cuando es poca la cantidad a cargar sin especificar ruta y nombre de archivo
3. El Fichero de Control:
Es el que especifica de que forma sern cargados los datos y en que tablas y columnas sern recibidos esos datos.
Contenido:
Localizacin y nombre del archivo de datos de entrada. Formato de los registros en el fichero de datos. El nombre de las tablas o tablas donde sera cargada la informacin. Definicin de un criterio con el cual los datos de un fichero de entrada sern cargados en las tablas destino. Localizacin y nombre de archivos errneos y descartados (discard y bad files).
El archivo esta dividido en tres secciones: 1 Seccin de DECLARACION 2 Seccin de PARAMETROS de linea de comando 3 Seccin de DATOS Sintaxis: Formato libre (puede haber varios espacios en blanco, salto de linea, tabulaciones se consideran espacios) Case Sensitive (nombre de tablas, archivos, columnas de la BD.) Palabras reservadas para Sql *Loader: APPEND, BADFILE, BEGINDATA Si utilizamos alguna de estas palabras,deben estar entre comillas simples o dobles. Se puede colocar comentarios de la siguiente forma: --COMENTARIO aunque no se aceptan comentarios en la seccin de datos. Ejemplo:
Otros parmetros a utilizar al especificar las tablas: REENABLE / DISABLED_CONTRAINTS RECOVERABLE / UNRECOVERABLE Permite grabar en Redo.log OPTIONS (DIRECT=TRUE) Especifica que la carga se har mediante ruta directa. Into table emp INSERT/APPEND/REPLACE/TRUNCATE (puede declararse antes de especificar la tabla (de forma global para todas las tablas a cargar) o despus (local para una tabla especifica)
LOS DATOS.
Validacin:
Esta herramienta nos asegura que solamente cargara en nuestra Base de Datos datos correctos, es imposible que un campo Number sea cargado en un campo DATE o a la inversa, los registros que no tengan la conversin adecuada sern escritos en un archivo errneo(Bad Files) Tambin se nos permite mediante la clausula WHEN realizar una seleccin de los datos a cargar, si algn registro no cumpliera la condicin impuesta este sera escrito en un archivo descartado (discard files)
Tipos de Datos:
Datos soportados y comnmente usados por Sql loader: CHAR COLUMNAS CHAR/VARCHAR2 DATE COLUMNAS DATE INTEGER EXTERNAL, DECIMAL EXTERNAL, NUMERICOS SMALLINT int en C FLOAT DOUBLE
Longitud fija:
Cuando todos los registros de un fichero de datos tienen la misma longitud en bytes, y la posicin de los campos no varan de un registro a otro,se dice que son datos de longitud fija.
Pueden especificarse de la siguiente forma: Inicio y finalizacion de la posicin - Nombre POSITION(4:47) CHAR, Posicin inicial y longitud - Nombre POSITION(4) CHAR(44), Tipo de campo y longitud. -Nombre CHAR (44),
10
11
12
Longitud variable:
En formato variable cada registro es slo el largo necesario para contener los datos. Si el primer elemento es ms corto que el segundo, el primer registro sera ms corto. Se puede utilizar distintos caracteres para marcar la delimitacion de los campos. Delimitacion de Datos: Anna River,stream,Alger,462440N,0863825W,630,08-Dec-2000 10:58 AM Anna River**stream**Alger**462440N**0863825W**630**12/8/2000 10:58 AM LOAD DATA INFILE 'variable.dat' REPLACE INTO TABLE Michigan [FIELDS TERMINATED BY '**'] [FIELDS TERMINATED BY WHITESPACE] (nombre CHAR TERMINATED BY ',',OPTIONALLY ENCLOSED BY '"', condado CHAR TERMINATED BY ',', latitud CHAR TERMINATED BY ',', longitud CHAR TERMINATED BY ',', elevacion INTEGER EXTERNAL TERMINATED BY ',', hora DATE "DD-MON-YYYY HH:MI AM")
5. El Fichero Log.
El archivo log es una copia de la actividad producida durante la carga de datos, contiene la siguiente informacin: Nombre del archivo de control, archivo log, archivo errneo, archivo descartado, archivo de datos. Valor de distintos parmetros de la linea de comando. Detalle de los campos y tipo de datos contenidos en el archivo de datos cargado. Mensajes de error cuando los datos han causado errores. Mensajes indicando que determinados datos han sido descartados. Un resumen de la carga realizada incluyendo el numero de datos ledos desde el archivo de datos, el numero de columnas rechazadas por causa de errores, numero de columnas rechazadas por el criterio de seleccin, y por el tiempo transcurrido de la carga.
Es conveniente revisar este archivo despus de realizar una carga de datos, ya que esta informacin no se nos mostrara por pantalla al finalizar la carga. Ejemplo de Archivo LOG: 13
por defecto
Number to load: ALL Number to skip: 0 registros o atributos que no quieren cargarse Errors allowed: 50 por defecto Bind array: 64 rows, maximum of 65536 bytes Path used: Conventional significa que se ha usado in INSERT en la carga Bind array es un rea de memoria donde SQL*LOADER almacena datos para filas que sern insertadas en la base de datos. Cuando el bind array se llena, SQL*Loader inserta los datos en el la tabla y luego ejecuta un COMMIT. Column Name Position Len Term Encl Datatype ------------------------------ ---------- ----- ---- ---- --------------------EMPNO 1:4 4 CHARACTER ENAME 6:15 10 CHARACTER JOB 17:25 9 CHARACTER MGR 27:30 4 CHARACTER SAL 32:39 8 CHARACTER COMM 41:48 8 CHARACTER DEPTNO 50:51 2 CHARACTER HIREDATE 52:60 9 CHARACTER (FILLER FIELD)
Esta parte indica los datos cargados y si hay datos que existan anteriormente
Record 8: Rejected - Error on table EMP. ORA-01400: cannot insert NULL into ("SCOTT"."EMP"."EMPNO") errores Record 9: Rejected - Error on table EMP. ORA-00001: unique constraint (SCOTT.EMPIX) violated 7 Rows successfully loaded. 2 Rows not loaded due to data errors. 0 Rows not loaded because all WHEN clauses were failed. 0 Rows not loaded because all fields were null. Space allocated for bind array: 65520 bytes(910 rows) Space allocated for memory besides bind array: 0 bytes Total logical records skipped: Total logical records read: Total logical records rejected: Total logical records discarded: 0 9 2 0
Run began on Sun Nov 08 11:49:42 1998 Run ended on Sun Nov 08 11:49:42 1998 Elapsed time was: 00:00:00.69 CPU time was: 00:00:00.13
14
15
Creacin del archivo de control: Abrimos el block de notas, colocamos las siguientes lineas y lo guardamos en formato .CTL
Aclaraciones: OPTIONS (SKIP=1) Ignorara el primer registro (Encabezado) APPEND Mantendr datos existentes de la tabla WHEN (nacionalidad='Colombiano') Ignorara los registros cuya nacionalidad no sea colombiano. Realizamos la carga de datos de la siguiente forma: sqlldr medusa/medusa@oracle control=C:\SQL_LOADER\control.ctl log=c:\SQL_LOADER\personas.log data=c:\SQL_LOADER\personas.csv
16
17
Datos cargados:
18
19
7. Realizar Cargas de Datos de un Fichero a Varias Tablas y de Varios Ficheros a una Tabla.
Primer ejemplo: Varios ficheros 1 tabla Creamos los ficheros a cargar: Siglas pas, cdigo referencia
Cargamos los datos dentro de la tabla pases CREATE TABLE pases ( pas VARCHAR2(10), ref_id VARCHAR2(10) constraint paisespk primary key ); Creamos el fichero de control paises.ctl LOAD DATA INFILE 'C:\SQL_LOADER\orden1.csv' INFILE 'C:\SQL_LOADER\orden2.csv' INFILE 'C:\SQL_LOADER\orden3.csv' INSERT INTO TABLE paises WHEN pais = 'IND' ( pais CHAR TERMINATED BY ',' , ref_id CHAR TERMINATED BY ',' )
20
21
22
Fichero de control multitablas.scv LOAD DATA INFILE * INTO TABLE empdallas INSERT WHEN (deptno='dallas') FIELDS TERMINATED BY , (empno INTEGER(4), ename CHAR(10), sal DECIMAL EXTERNAL(7), deptno CHAR(10)) INTO TABLE texas INSERT WHEN (deptno='texas') FIELDS TERMINATED BY , (empno INTEGER(4), ename CHAR(10), sal DECIMAL EXTERNAL(7), deptno CHAR(10)) BEGINDATA 1234,BAKER,9999,dallas 1334,JOKER,9299,texas 2664,YOUNG,2893,dallas 5321,OTOOLE,1099,dallas 2134,FARMER,4555,dallas 2414,LITTLE,5634,texas 6542,LEE,4532,texas 2849,EDDS,3555,dallas 4532,PERKINS,2999,texas 1244,HUNT,3452,texas 1235,DOOLITTLE,9940,dallas 1453,MACDONALD,1532,texas Hacemos llamada a sqlldr
23
24
25
LOAD DATA
INFILE 'c:\SQL_LOADER\longitud_fija.dat' APPEND INTO TABLE emp
LOAD DATA
INFILE 'c:\SQL_LOADER\longitud_fija.dat' APPEND INTO TABLE emp WHEN (06) <> 'H' and (06) <> 'T' and (30:37) = 'clerk' (empno POSITION(01:04) INTEGER EXTERNAL, ename POSITION(06:15) CHAR, job POSITION(17:25) CHAR, mgr POSITION(27:30) INTEGER EXTERNAL, hiredate FILLER DATE. sal POSITION(32:39) DECIMAL EXTERNAL, comm POSITION(41:48) DECIMAL EXTERNAL, deptno POSITION(50:51) INTEGER EXTERNAL) Por otra parte si lo que no queremos es cargar un atributo especifico, la forma mas simple es mediante la clausula FILLER Teniendo los datos correspondientes a CODIGO, NOMBRE y DESCRIPCION de cosas 123,Manzana,Fruta 999,Perro,Animal 666,Gato,Animal
26
LOAD DATA APPEND INTO TABLE Cosas (codigo FILLER CHAR TERMINATED BY ',' , nombre CHAR TERMINATED BY ',' ,, descripcion CHAR TERMINATED BY ',') En este caso no sern cargado los datos correspondiente al codigo, solamente nombre y descripcion.
27
28
guardamos el fichero con el nombre sript_salida con la extension .SQL Desde la linea de comando de Sql Plus escribimos lo siguiente @c:\SQL_LOADER\script_salida.sql
29
Automticamente se creara el fichero de salida en formato txt con los datos solicitados Algunos parmetros que tambin pueden utilizarse: LIN[ESIZE] {150|n} PAGES[IZE] {14|n} SET TERM OFF cantidad de caracteres antes de hacer salto de linea. cantidad de lineas por pagina. No mostrara el resultado por pantalla.
30
31
32
Formato PDF
33
34
35
Tambin sern solicitados los datos correspondientes al usuario con el que estemos trabajando en nuestro ordenador.
36
37
38
39
40
Algunas Diferencias con la Creacin automtico del fichero de control. Nos permitir crear tablas o buscar tablas ubicadas en la base de datos.
41
42
43
Descarga de Datos con Enterprise Manager En este caso vamos a exportar los datos de una tabla. Ubicados nuevamente en la pestaa Movimiento de datos, seleccionamos la opcin Exportar a Archivos de Exportacin.
44
45
En la siguiente pantalla se especificara el directorio y el fichero log que se creara, en opciones avanzadas colocamos la opcin a descargar los datos de fila de la tabla
46
47
48
Hacemos doble clic sobre el nombre del trabajo creado: y seleccionamos la opcin exportar
49
50
12. WebGrafia.
51