martes, 8 de abril de 2014

Visión General SQL*Loader


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 información deben estar creadas ya que Sql *Loader no crea tablas, y estas tablas pueden estar vacías o con datos ya incorporados.

Características:
• Permite cargas desde ficheros de texto aunque también pueden ser binarios.
• Soporta varios Formatos de carga, carga selectiva, cargas multitablas.
• Puede utilizarse en distintas plataformas.
• Puede leer desde múltiple ficheros de datos en una misma sesión de carga.
• Puede cargar datos en diferentes tablas en una misma sesión de carga.
• Puede manipular ficheros de longitud fija y variable
• Soporta dos tipos de ruta de carga: ruta convencional y directa
• Permite transformación de datos durante la carga

Bad Files.
Los datos erróneos son aquellos que no han sido insertados en las tablas de la base de datos porque no han podido ser leídos correctamente desde el fichero de datos de entrada o bien su inserción causa errores de incumplimiento de restricciones definidas en las tablas.
• Violación 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 condición que puede imponerse en el fichero de control, de manera que tan solo se inserten los datos que satisfacen dicha condición.

Si estos dos últimos archivos no son especificados, se crearan automáticamente al encontrarse datos erróneos y descartados. Estos parámetros pueden pasarse bien desde la linea de comando o pueden ir incluidos dentro del fichero de control, también 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

Fichero de control
Es el que especifica de que forma serán cargados los datos y en que tablas y columnas serán
recibidos esos datos.

Contenido:
• Localización 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 información.
• Definición de un criterio con el cual los datos de un fichero de entrada serán cargados en las
tablas destino.
• Localización y nombre de archivos ”erróneos” y “descartados” (discard y bad files).

El archivo esta dividido en tres secciones:
1 – Sección de DECLARACION
2 – Sección de PARAMETROS de linea de comando
3 – Sección 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 sección de datos.


Otros parámetros 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 después (local para una tabla especifica)

Validación:
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 conversión adecuada serán escritos en un archivo erróneo(Bad Files) También se nos permite mediante la clausula WHEN realizar una selección de los datos a cargar, si algún registro no cumpliera la condición impuesta este sera escrito en un archivo descartado (discard files)

Tipos de Datos:
Datos soportados y comúnmente 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 posición de los campos no varían de un registro a otro,se dice que son datos de longitud fija.
Pueden especificarse de la siguiente forma:

Inicio y finalizacion de la posición - Nombre POSITION(4:47) CHAR,
Posición inicial y longitud - Nombre POSITION(4) CHAR(44),
Tipo de campo y longitud. -Nombre CHAR (44),

Carga de datos Longitud fija y variable:
Fichero : longitud_fija.dat
7781 CLARK MANAGER 7838 2572.50 10
7934 MILLER CLERK 7782 920.00 10
7566 JONES MANAGER 7839 3123.75 20
7499 ALLEN SALESMAN 7698 1600.00 30
7654 MARTIN SALESMAN 7698 1312.50 30
7658 CHAN ANALYST 7566 3450.00 20

Creamos el fichero control file longitud_fija.ctl

LOAD DATA
INFILE 'c:\SQL_LOADER\longitud_fija.dat'
APPEND INTO TABLE emp
(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)

Realizamos la carga de datos:

sqlldr userid =scott/scott@oracle control=c:\SQL_LOADER\longitud_fija.ctl
data=c:\SQL_LOADER\longitud_fija.dat log=c:\SQL_LOADER\longitud_fija.log

Carga de datos Longitud variable:
En formato variable cada registro es sólo el largo necesario para contener los datos. Si el primer elemento es más corto que el segundo, el primer registro sera más 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")

Fichero Log

El archivo log es una copia de la actividad producida durante la carga de datos, contiene la siguiente información:
• Nombre del archivo de control, archivo log, archivo erróneo, archivo descartado, archivo de
datos.
• Valor de distintos parámetros 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 leídos desde el archivo de
datos, el numero de columnas rechazadas por causa de errores, numero de columnas
rechazadas por el criterio de selección, y por el tiempo transcurrido de la carga.

Es conveniente revisar este archivo después de realizar una carga de datos, ya que esta información no se nos mostrara por pantalla al finalizar la carga



No hay comentarios:

Publicar un comentario