Cargas de Datos Con SQL Loader
Cargas de Datos Con SQL Loader
Cargas de Datos Con SQL Loader
1
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
ÍNDICE
• Contenido.
• Tipos de datos soportados.
• Ejemplo.
• Contenido.
• Ejemplo.
• Ejemplos.
2
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
• Ejemplos.
3
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
1. Introducción 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.
• 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.
• Conocer las posibilidades que ofrece Enterprise Manager para carga y descarga de
datos.
4
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
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 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
Al escribir en la linea de comando sqlldr se nos desplegara una lista de los parámetros a utilizar .
USERID={username[/password][@net_service_name]|/} → usuario
CONTROL=control_file_name → ruta y archivo de control utilizado
LOG=path_file_name → ruta y archivo de log
BAD=path_file_name →ruta y archivo generado por datos
erróneos
DATA=path_file_name → ruta y archivo con datos de entrada
DISCARD=path_file_name → ruta y archivo generado con datos
descartados
DISCARDMAX=logical_record_count → maxcantidad de archivos descartados
SKIP=logical_record_count → salto de registros
LOAD=logical_record_count → registros a cargar por defecto(all)
ERRORS=insert_error_count → cantidad de errores aceptados
ROWS=rows_in_bind_array → numero de filas que se cargan con
cada INSERT
BINDSIZE=bytes_in_bind_array → Máximo tamaño 65536b, 64k
SILENT=[(]keyword[,keyword...][)] → permite suprimir cabeceras, mensajes
DIRECT={TRUE | FALSE} → Tipo de path usado para la carga
PARFILE=path_file_name → lee parámetros desde fichero de texto
READSIZE=bytes_in_read_buffer → cant. buffer utilizado en la carga
FILE=database_datafile_name → ruta y nombre de fichero de entrada
5
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Sql Loader conecta con un usuario de la base de datos, se le dice cual es el fichero de texto que
contiene la información a importar a la Base de datos y cual es el que contiene las especificaciones
sobre lo que se va a hacer con esa información (archivo de control .CTL).
De los parámetros vistos anteriormente utilizaremos con mas frecuencia los siguientes para
trabajar mediante linea de comando:
• userid=usuario/contraseña@orcl
• Control
• Data
• log
• Discard
• bad
Métodos de Carga:
Carga de Ruta Convencional:
Por defecto es el utilizado y utiliza el parámetro INSERT y hace uso de bind array para cargar
datos en las tablas de la Base de Datos. Cuando se utiliza este método Sql Loader compite con el
resto de los procesos por la utilización 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 descripción 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 conversión 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.
6
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Ejemplo 1:
sqlldr userid=usuario/contraseña@NombreBasedeDatos control=c:\carga.ctl data=c:\datos.dat
Ejemplo 2:
sqlldr userid=usuario/contraseña@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 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
7
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
3. El 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:
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.
• Ejemplo:
8
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
9
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
LOS DATOS.
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:
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.
10
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Fichero : longitud_fija.dat
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)
11
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
12
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
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:
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
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.
13
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Bind array es un área de memoria donde SQL*LOADER almacena datos para filas que serán
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.
14
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
15
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Abrimos el block de notas, colocamos las siguientes lineas y lo guardamos en formato .CTL
Aclaraciones:
16
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
17
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Datos cargados:
Estos tipos de objetos pueden ser almacenados bien en tablas objeto, o columnas objeto.
18
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Ejemplo:
Datafile (sample.dat)
101,Mathematics,Johny Q.,301189453,10249,
237,Physics,"Albert Einstein",128606590,10030,
19
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Primer ejemplo:
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
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
21
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
22
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Ejemplo 2 :
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
23
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
24
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
25
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
En ciertas ocasiones hay datos que queremos o NO que sean cargados, para eso debemos añadir
condiciones mediante la clausula WHEN, esta sera insertada debajo de la clausula INTO TABLE y
si necesitamos colocar mas de una condición siempre serán unidas mediante el operador AND, ya
que el operador OR no es permitido.
LOAD DATA
APPEND INTO TABLE Medico
WHEN (profesion='medico') AND (pais='Colombia')
(
cedula CHAR TERMINATED BY ', ,
nombre CHAR TERMINATED BY ',',
apellido CHAR TERMINATED BY ','',
)
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
123,Manzana,Fruta
999,Perro,Animal
666,Gato,Animal
26
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
LOAD DATA
APPEND INTO TABLE Cosas
(codigo FILLER CHAR TERMINATED BY ',' ,
nombre CHAR TERMINATED BY ',' ,,
descripcion CHAR TERMINATED BY ',')
En este caso no serán cargado los datos correspondiente al codigo, solamente nombre y descripcion.
La Base de datos Oracle soporta (LOB) Large Objects , son una clase particular de tipo de datos
que permite almacenar gran cantidad de datos de texto o datos binarios en una columna(+ de 4 GB).
Se encuentran 4 tipos:
LOAD DATA
INFILE *
REPLACE
INTO TABLE imágenes
FIELDS TERMINATED BY ','
(codigo CHAR(1),
descripcion CHAR(20),
color CHAR(1),
formato CHAR(3),
extension FILLER CHAR(90), → determina el tamaño máximo que tendrá el nombre del fichero a
cargar
imagen_blob lobfile(extension) TERMINATED BY EOF) → utiliza solamente para LOB files
BEGINDATA
1,escudoumbn55x55,B,jpg,c:\SQL_LOADER\image2.jpg
2,escudoumc55x55,C,jpg,c:\SQL_LOADER\image3.jpg
27
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
28
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Para enviar los datos correspondientes a una tabla existente debemos escribir los siguientes
paramentros en la consola de sql plus o bien crear nuestro propio script
Ejemplo:
Creamos con el block de notas un fichero en una ubicación del disco c:\SQL_LOADER , a este le
vamos a agregar las siguientes lineas:
@c:\SQL_LOADER\script_salida.sql
29
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Automáticamente se creara el fichero de salida en formato txt con los datos solicitados
30
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
31
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
32
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Formato PDF
33
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Se nos Pedirá el nombre y contraseña de un usuario existente en la Base de Datos o del mismo
administrador
34
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
35
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
También serán solicitados los datos correspondientes al usuario con el que estemos trabajando en
nuestro ordenador.
36
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
37
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
38
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
39
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
40
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
41
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
42
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
43
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
44
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
45
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
46
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
47
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
48
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
Hacemos doble clic sobre el nombre del trabajo creado: y seleccionamos la opción exportar
49
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
50
Sistemas Gestores de Bases de Datos Proyecto Administración de Base de Datos: Sql*Loader
12. WebGrafia.
• http://www.orafaq.com/wiki/SQL*Loader_FAQ
• http://oreilly.com/catalog/orsqlloader
• http://download.oracle.com/doc
• http://examples.oreilly.com/
51