Vous êtes sur la page 1sur 11

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

Forums Tutoriels Magazine FAQs Blogs Projets Chat Newsletter Emploi Contacts

Accueil Conception Java .NET Dv. Web EDI Langages SGBD Office Solutions d'entreprise Applications Systmes
SGBD
FORUM ORACLE

4D

Access

DB2

Firebird

InterBase

MySQL

Oracle

PostgreSQL

SQL-Server
QUIZ

Sybase
BLOG ORACLE

F.A.Q ORACLE

TUTORIELS ORACLE

TUTORIELS SQL

SCRIPTS SQL

LIVRES ORACLE

Sql*Loader : Comment effectuer des chargements de donnes sous Oracle


Date de publication : 14 Septembre 2005 Par Jaouad Charger des donnes provenant d'un fichier (Cet article couvre les versions 8 10G)

I. Prface II. Introduction III. SQL*LOADER III-A. Comment appeler sqlldr ? III-B. Comment marche sqlldr III-B-1. Le fichier de contrle III-B-2. Le fichier de donnes III-B-3. Le fichier : Bad Files III-B-4. Le fichier : Discard Files III-B-5. Le fichier Log : Log files III-C. Les paramtres de Sql*Loader III-C-1. Le paramtre Direct IV. Exemple IV-A. Prparation IV-B. Cration de la table IV-C. Cration du fichier de donnes IV-D. Cration du fichier de contrle IV-E. Cration de la commande de chargement IV-F. Rsultat V. Sql*Loader FAQ V-A. Comment viter de charger la premire ligne V-B. Comment filtrer les chargements V-C. Comment exporter des donnes d'Oracle V-D. Comment charger les mmes donnes dans plusieurs tables V-E. Comment charger des donnes et les valeurs d'une squence V-F. Comment charger des donnes avec des colonnes vides V-G. Comment Valider uniquement la fin du chargement V-H. Commet sauvegarder le schma qui a charg les donnes, ainsi que le SESSIONID V-I. Comment modifier les donnes insres V-J. Charger des donnes en fonction de taille V-K. Les Index sont mis jour lors du chargement V-L. Comment charger diffrents fichiers dans la mme table V-M. Comment charger des donnes dans des colonnes " LONG string " V-N. Comment crer une table externe avec le fichier de contrle. V-O. Comment charger des images avec Sql*Loader. V-P. Comment parallliser les chargements.

I. Prface
Dans un premier temps nous nous attellerons dtailler l'outil SQL*LOADER ainsi que ses diffrentes options ensuite nous verrons concrtement l'utilit de cet outil par un exemple simple. Ici il s'agit d'un tutorial de prise en main rapide de l'outil. Pour les cas plus complexe, je vous renvoie la documentation.

II. Introduction
SQL LOADER ou sqlldr est un excutable binaire qui permet le chargement de donnes partir de fichiers plats et destination d'Oracle. Il est prsent dans le rpertoire suivant : Unix : $ORACLE_HOME/bin/ Windows : %ORACLE_HOME%\bin

1 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

Exemple sous Unix ( HP PA RISC )


$ cd $ORACLE_HOME/bin $ ls -ltr sqlldr -rwxr-x--x 1 oracle

dba

572928 Nov 12

2003 sqlldr

Cependant en fonction de la plate-forme du systme d'exploitation et de la version d'oracle le binaire SQL*LOADER peut avoir diffrents noms : Version 8.1.X SQLLDR.EXE sqlldr SQLLDR.EXE sqlldr SQLLDR81.NLM

Plateforme Windows UNIX VMS MVS Netware

7.3.X SQLLDR73.EXE sqlldr SQLLDR.EXE sqlldr SQLLOAD.NLM

8.0.X SQLLDR80.EXE sqlldr SQLLDR.EXE sqlldr SQLLDR80.NLM

9.0.X SQLLDR.EXE sqlldr SQLLDR.EXE sqlldr N/A

9.2.X SQLLDR.EXE sqlldr SQLLDR.EXE sqlldr N/A

III. SQL*LOADER
III-A. Comment appeler sqlldr ?
En fonction du nom de l'excutable, on va ouvrir une fentre de commande et l'appeler en tapant tout simplement sqlldr. S'il n'y a pas d'argument on fait appel l'aide en ligne.
SQL*Loader: Release 9.2.0.1.0 - Production on Lu Sep 12 15:03:01 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Syntaxe : SQLLDR keyword=value [,keyword=value,...]!

Notons que pour pouvoir appeler l'outil ainsi il est primordial que le chemin $ORACLE_HOME/bin apparaisse dans le PATH ou alors que ce dernier soit positionn avant l'appel.

III-B. Comment marche sqlldr


Comme nous le voyons nous allons fournir un fichier de donnes, et un fichier de contrle qui nous permette de contrler le chargement des donnes. Nous allons avoir outre le chargement des donnes un fichier de LOG, un fichier DISCARD et un fichier BAD ( si ces derniers sont paramtrs).

III-B-1. Le fichier de contrle


Le fichier de contrle est un fichier qui est crit dans le langage SQLLOADER . Il va nous permettre de :

1. 2. 3. 4. 5.

Dcrire les actions que Sql*Loader doit effectuer. Trouver les donnes charger Effectuer une analyser syntaxique et interprter les donnes. Insrer les donnes. (... )

III-B-2. Le fichier de donnes


C'est un fichier plat ( csv, txt ... ) qui stocke les donnes et les sparateurs.

2 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

III-B-3. Le fichier : Bad Files


Il contient les enregistrements qui ont t rejet soit par SQL*LOADER soit par Oracle. En effet le processus de chargement se droule ainsi : Sql*Loader lit les lignes une une puis les envoie Oracle. Si une ligne venait ne pas tre conforme pour SQLLOADER celle ci serait rejete et un fichier bad file serait cre ou aliment s'il est dj cre. Lorsque la ligne parvient Oracle, celui ci va voir si son insertion est possible ou pas en fonction de cl primaire, contrainte, dfinition de la colonne ? S'il apparat que la ligne n'est pas en conformit avec cela alors Oracle va rejeter la ligne en suivant la mme procdure que Sql*Loader. Comme le fichier BAD est gnr comme le fichier de donnes, vous pouvez aprs avoir dtermin et solutionn le problme effectu un nouveau chargement avec uniquement les donnes contenues dans le BAD FILE.

III-B-4. Le fichier : Discard Files


Le fichier DISCARD peut tre spcifi lors l'appel de la commande ou alors directement dans le fichier contrle. Ce fichier est cre uniquement sur demande explicite et dtaille les enregistrements qui n'ont pas t retenu par Sql*Loader. En effet si dans le fichier de contrle on spcifie une clause pour filtrer les donnes et que Sql*Loader dtecte des lignes qui ne sont pas en conformit avec cette clause, elle les stocke dans le ficher DISCARD.

III-B-5. Le fichier Log : Log files


Le loader d'oracle va chaque excution du binaire produire un fichier log ou comme dans tout fichier log il va effectuer un rsum des actions :

1. Information d'entte : Date d'excution et numro de version de l'outil. 2. Information globale : Nom des fichiers en entre et sortie. Arguments des commandes. Spcification de caractre de suite. 3. Information sur la table : (nom de la table, condition de chargement, spcification d'insertion ( INSERT, APPEND, REPLACE ? ), dtail des colonnes de la tables. 4. Information sur les fichiers de donnes(erreurs lors des chargements, donnes cartes). 5. Information sur les donnes insres. ( Nombre d'insertion, nombre de rejet, nombre d'erreurs ). 6. Quelques statistiques : Espace utilis, Total elapsed time, Total CPU time...

III-C. Les paramtres de Sql*Loader


Afin de connatre les diffrents paramtres de Sql*Loader il suffit de taper sqlldr sur l'invite de commande.
C:\>sqlldr SQL*Loader: Release 9.2.0.1.0 - Production on Lu Sep 12 15:55:34 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Syntaxe : SQLLDR keyword=value [,keyword=value,...] Mots-cls valides : userid -- ORACLE username/password control -- Control file name log -- Log file name bad -- Bad file name data -- Data file name discard -- Discard file name discardmax -- Number of discards to allow (Tous par dfaut) skip -- Number of logical records to skip (0 par dfaut) load -- Number of logical records to load (Tous par dfaut) errors -- Number of errors to allow (50 par dfaut) rows -- Number of rows in conventional path bind array or between direct p ath data saves (Par defaut: Accs conventionnel: 64, Accs direct: tous) bindsize -- Size of conventional path bind array in bytes (256000 par dfaut) silent -- Suppress messages during run (header,feedback,errors,discards,part itions) direct -- use direct path (FALSE par dfaut) parfile -- parameter file: name of file that contains parameter specification s parallel -- do parallel load (FALSE par dfaut) file -- File to allocate extents from skip_unusable_indexes -- disallow/allow unusable indexes or index partitions (F ALSE par dfaut) skip_index_maintenance -- do not maintain indexes, mark affected indexes as unus able (FALSE par dfaut) readsize -- Size of Read buffer (1048576 par dfaut) external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE (NOT_USED par dfaut) columnarrayrows -- Number of rows for direct path column array (5000 par dfaut ) streamsize -- Size of direct path stream buffer in bytes (256000 par dfaut) multithreading -- use multithreading in direct path resumable -- enable or disable resumable for current session (FALSE par dfaut ) resumable_name -- text string to help identify resumable statement resumable_timeout -- wait time (in seconds) for RESUMABLE (7200 par dfaut)

Nous allons uniquement dtailler les paramtres les plus utiliss, pour les autres une simple recherche sur la documentation officielle rpondra vos questions. Userid Nom de l'utilisateur et mot de passe Oracle

3 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

Control Log Data Bad Discard Discardmax Skip Load Errors Silent Direct Bindesize

Chemin complet du fichier de contrle. Chemin complet du fichier de contrle. Chemin complet du fichier de donnes. Chemin complet du fichier BAD. Chemin complet du fichier DISACRD. Nombre maximum d'enregistrement dans le fichier Discard H Nombre maximum d'enregistrement sauter . Nombre maximum d'enregistrement insrer Nombre maximum d'enregistrement en erreurs ( ce paramtre doit tre 0 sauf cas particulier). Sql*Loader est affich en mode silence ( pas d'affichage l'cran). Insertion en Mode Direct taille du tableau prcdent en bytes

Parrallel Effectuer des chargements en parallles. mode de chargement : insert : insre les donnes dans une table vide append : insre les donnes la suite des donnes existantes replace : insre les donnes en remplaant les donnes existantes truncate : insre les donnes aprs un TRUNCATE ( ici cette solution peut tre utile pour faire diminuer le HWM ).

III-C-1. Le paramtre Direct


Nous allons dtailler cette option qui peut parfois tre utile : L'insertion par chemin direct fait l'analyse syntaxique des donnes d'entre selon les spcifications des champs, convertit les donnes d'entre en colonne datatype et construit un tableau de colonne. On passe le tableau de colonne au bloc formatter , qui cre des blocs de donnes sur le format de bloc de base de donnes d'Oracle. Les blocs de base de donnes nouvellement formats sont crits directement dans la base de donnes Contournant ainsi la plupart de traitement de RDBMS( journalisation des donnes dans les REDO LOGS ? ) . L'insertion par chemin direct est beaucoup plus rapide que l'insertion par chemin conventionnel, mais entrane plusieurs restrictions. Elle enlve galement la possibilit d'avoir une restauration de ces donnes puisque que par extension les donnes ne seront pas prsentes dans les fichiers REDO et d'archives.

Attention, L'option direct peut tre galement comporter quelques effets de bord. En effet lors de l'insertion par ce mode Oracle ne va pas chercher dterminer quels sont les blocs libres mais va insrer les donnes au-dessus du High Water Mark (HWM). C'est pourquoi il faut, lorsque nous insrons les donnes dans une table de travail, utiliser l'option TRUNCATE.

Les restrictions l'utilisation du chargement direct :

1. Tables non clusterises. 2. Pas de transactions actives sur les tables concernes ( on peut vrifier cela on contrlant les verrous sur la table ). 3. Pas de restrictions SQL dans le fichier de contrle Ces fonctionnalits ne sont utilisables avec l'option DIRECT PATH :

1. 2. 3. 4. 5. 6.

LOBs VARRAY nested tables REF colonne Fonctions dans le fichier de contrle (...)

IV. Exemple
Nous allons illustrer notre documentation par un petit exemple concret .

IV-A. Prparation

IV-B. Cration de la table


SQL> create table DVP_loader ( nom varchar2(20) , salaire Table cr number ) ;

IV-C. Cration du fichier de donnes


Nous allons crons un fichier de donnes, la main, recensant les diffrents membres de DVP et leur salaire.
Jaouad;100 orafrance;200

4 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

loanderson;300 bouyao;400 Nuke_y;500 sheikyerbouti;600 pomalaix;700 titides;800 aline;900 denisys;1000 niourk;1100

IV-D. Cration du fichier de contrle


Nous allons insrer les donnes dans la table cre en mode direct :
LOAD DATA INFILE 'data.csv' TRUNCATE INTO TABLE DVP_LOADER FIELDS TERMINATED BY ';' ( NOM , SALAIRE )

IV-E. Cration de la commande de chargement


C:\load>sqlldr userid=formation/formation control=control.txt log=log.txt bad=bad.txt discard=disard.txt direct=y errors=0

Nous avons paramtrer le seuil de tolrance d'erreurs 0 afin de s'assurer que nous insrons toutes les donnes.

IV-F. Rsultat
Voyons un peu le rsultat :
SQL> SELECT bytes/1024 taille_ko FROM dba_segments 2 WHERE segment_name ='DVP_LOADER' AND owner ='FORMATION' 3 ; TAILLE_KO ---------192

Cette table n'est pas vide. Comme nous utilisons l'option TRUNCATE, la taille de la table devrait diminuer ( et de fait son HWM).
C:\load>sqlldr userid=formation/formation control=control.txt log=log.txt bad=ba d.txt discard=disard.txt direct=y errors=0 SQL*Loader: Release 9.2.0.1.0 - Production on Lu Sep 12 18:00:14 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Chargement termin - calcul enregistrement(s) logique(s) 11. C:\load>`

Voyons ce que donne le HWM :


SQL> analyze table formation.DVP_LOADER compute statistics ; Table analyse. SQL> select count (*) from formation.DVP_LOADER ; COUNT(*) ---------11 SQL> r 1 SELECT bytes/1024 taille_ko FROM dba_segments 2* WHERE segment_name ='DVP_LOADER' AND owner ='FORMATION' TAILLE_KO ---------64 SQL>

Fichier LOG :
SQL*Loader: Release 9.2.0.1.0 - Production on Lu Sep 12 18:00:14 2005 Copyright (c) 1982, 2002, Oracle Corporation. Fichier de contrle : control.txt Fichier de donnes : data.csv Fichier BAD : bad.txt Fichier DISCARD : disard.txt (Allouer tous les rebuts) Nombre charger : ALL Nombre sauter: 0 Erreurs permises: 0 Continuation : aucune spcification Chemin utilis: Direct All rights reserved.

5 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

Table DVP_LOADER, charg partir de chaque enregistrement physique. Option d'insertion en vigueur pour cette table : TRUNCATE Nom de colonne Position Long. Sparat. Encadrem. Type de donnes ------------------------------ ---------- ----- ---- ---- --------------------NOM FIRST * ; CHARACTER SALAIRE NEXT * ; CHARACTER

Table DVP_LOADER : Chargement russi de 11 Lignes. 0 Lignes chargement impossible d des erreurs de donnes. 0 Lignes chargement impossible car chec de toutes les clauses WHEN. 0 Lignes chargement impossible car tous les champs taient non renseigns. Taille Lignes Octets Octets Nombre Nombre Nombre Nombre Nombre Nombre du de de de tableau de liens non utilise dans le chemin direct. tableau de colonnes : 5000 tampon de flux de donnes : 256000 tampon de lecture : 1048576 d'enregistrements logiques ignors : 0 d'enregistrements logiques lus : 11 d'enregistrements logiques rejets : 0 d'enregistrements logiques mis au rebut : 0 de tampons de flux de donnes chargs par le thread principal de SQL*Loader : de tampons de flux de donnes chargs par le thread de chargement de SQL*Loader :

total total total total total total

2 0

Le dbut de l'excution a t effectu sur Lu Sep 12 18:00:14 2005 La fin de l'excution a t effectue sur Lu Sep 12 18:00:14 2005

Table DVP_LOADER :
SQL> select * from dvp_loader ; NOM SALAIRE -------------------- ---------Jaouad 100 orafrance 200 loanderson 300 bouyao 400 Nuke_y 500 sheikyerbouti 600 pomalaix 700 titides 800 aline 900 denisys 1000 niourk 1100 11 ligne(s) slectionne(s).

V. Sql*Loader FAQ
Bienvenue dans la partie FAQ de Sql*Loader, elle a pour but de rpondre quelques questions courantes que vous vous posez frquemment.

V-A. Comment viter de charger la premire ligne


Data.csv :
Nom;Salaire Jaouad;100 orafrance;200 loanderson;300 bouyao;400

Ici nous dsirons ne pas insrer la premire ligne qui correspond aux colonnes. Commande :
C:\load >sqlldr userid=formation/formation control=control.txt log=log.txt bad=bad.txt discard=disard.txt direct=y errors=0 skip=1

Le paramtre SKIP=1 permet d'ignorer la premire ligne. D'ailleurs nous retrouvons cette d'information dans le fichier LOG:
Nombre total d'enregistrements logiques ignors : Nombre total d'enregistrements logiques lus : 1 11

V-B. Comment filtrer les chargements


Si nous ne voulons pas intgrer toutes les donnes mais uniquement certaines. On modifie le fichier de contrle pour charger toutes les lignes sauf celle concernant Jaouad:
LOAD DATA INFILE 'data.csv' TRUNCATE INTO TABLE DVP_LOADER when (1:6) <> 'Jaouad' FIELDS TERMINATED BY ';' ( NOM , SALAIRE )

Le fichier Log :

6 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

Table DVP_LOADER, charg quand 1:6 != 0X4a616f756164(caractre 'Jaouad') Option d'insertion en vigueur pour cette table : TRUNCATE Nom de colonne Position Long. Sparat. Encadrem. Type de donnes ------------------------------ ---------- ----- ---- ---- --------------------NOM FIRST * ; CHARACTER SALAIRE NEXT * ; CHARACTER Enregistrement 1 : Rejet - chec de toutes les clauses WHEN. 1

V-C. Comment exporter des donnes d'Oracle


Comment effectuer une extraction d'une table Oracle pour alimenter une autre instance Oracle avec Sql*Loader :
SQL> desc dvp_loader Nom NULL ? ----------------------------------------- -------NOM SALAIRE

Type ---------------------------VARCHAR2(20) NUMBER

SQL> set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on SQL> spool c:\load\data2.csv SQL> select nom||';'||salaire from dvp_loader ; Jaouad;100 orafrance;200 loanderson;300 bouyao;400 Nuke_y;500 sheikyerbouti;600 pomalaix;700 titides;800 aline;900 denisys;1000 niourk;1100 SQL> spool off ; SQL>

Le fichier data2.csv est prt tre charg.

V-D. Comment charger les mmes donnes dans plusieurs tables


Ici on va sparer les enregistrements des fichiers dans deux tables diffrentes : Les nom dans la table dvp_loader et les salaires dans la table dvp2_loader. Changer le fichier de contrle :
LOAD DATA INFILE 'data.csv' INTO TABLE DVP_LOADER FIELDS TERMINATED BY ';' ( NOM ) INTO TABLE DVP2_LOADER FIELDS TERMINATED BY ';' TRAILING NULLCOLS ( b )

Lancer la commande. Le rsultat :


SQL> select * from dvp_loader ; NOM SALAIRE -------------------- ---------Jaouad orafrance loanderson bouyao Nuke_y sheikyerbouti pomalaix titides aline denisys niourk 11 ligne(s) slectionne(s). SQL> select * from dvp2_loader A B -------------------- ---------100 200 300 400 500 600 700 800 900 1000 1100 11 ligne(s) slectionne(s). ;

7 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

V-E. Comment charger des donnes et les valeurs d'une squence


Prparer l'environnement :
SQL> CREATE SEQUENCE dvp_seq 2 START WITH 1 3 INCREMENT BY 1; Squence cre. SQL> create table dvp3_loader Table cre. ( id number , nom varchar2(20) , salaire number ) ;

Modifier le fichier de contrle.


LOAD DATA INFILE 'data.csv' INTO TABLE DVP3_LOADER FIELDS TERMINATED BY ';' (id "dvp_seq.nextval", NOM , SALAIRE )

Voil le rsultat.
SQL> select * from dvp3_loader ; ID ---------1 2 3 4 5 6 7 8 9 10 11 NOM SALAIRE -------------------- ---------Jaouad 100 orafrance 200 loanderson 300 bouyao 400 Nuke_y 500 sheikyerbouti 600 pomalaix 700 titides 800 aline 900 denisys 1000 niourk 1100

V-F. Comment charger des donnes avec des colonnes vides


Utiliser le paramtre :TRAILING NULLCOLS dans le fichier de contrle.

V-G. Comment Valider uniquement la fin du chargement


En utilisant le paramtre Rows, attention au UNDO.

V-H. Commet sauvegarder le schma qui a charg les donnes,et le SESSIONID.


En le spcifiant dans le fichier de contrle :
LOAD DATA INFILE 'data.csv' INTO TABLE DVP3_LOADER FIELDS TERMINATED BY ';' (id "USER", NOM , SALAIRE )

On peut galement stocker la date et l'heure d'insertion en spcifiant : "SYSDATE" en lieu et place de "USER" . On peut galement spcifier le SESSIONID qui a charger les donnes, en le spcifiant dans le fichier de contrle.
LOAD DATA INFILE 'data.csv' INTO TABLE DVP3_LOADER FIELDS TERMINATED BY ';' (id "USERENV('SESSIONID')", NOM , SALAIRE )

Rappellons que ce numro est indx sur une squence appartenant SYS :sys.AUDSES$, dont le max value est 2000000000 ( 8174 , 10.1 et 9.2 ) .

V-I. Comment modifier les donnes insres


Le formatage de donnes doit se faire dans le fichier de contrle. Ici nous allons insrer le nom en majuscule et ajouter 1000 chacun. Fichier de contrle :

8 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

LOAD DATA INFILE 'data.csv' TRUNCATE INTO TABLE DVP_LOADER FIELDS TERMINATED BY ';' ( NOM "upper(:NOM)", SALAIRE ":SALAIRE+1000"

Le rsultat :
SQL> r 1* select * from dvp_loader NOM SALAIRE -------------------- ---------JAOUAD 1100 ORAFRANCE 1200 LOANDERSON 1300 BOUYAO 1400 NUKE_Y 1500 SHEIKYERBOUTI 1600 POMALAIX 1700 TITIDES 1800 ALINE 1900 DENISYS 2000 NIOURK 2100 11 ligne(s) slectionne(s).

Extrait du fichier LOG :


Table DVP_LOADER, charg partir de chaque enregistrement physique. Option d'insertion en vigueur pour cette table : TRUNCATE Nom de colonne Position Long. Sparat. Encadrem. Type de donnes ------------------------------ ---------- ----- ---- ---- --------------------NOM FIRST * ; CHARACTER chane SQL pour la colonne : "upper(:NOM)" SALAIRE NEXT * ; CHARACTER chane SQL pour la colonne : ":SALAIRE+1000"

V-J. Charger des donnes en fonction de taille


Nous voulons charger dans la table que les 5 premires lettres Ficher de contrle :
LOAD DATA INFILE 'data.csv' TRUNCATE INTO TABLE DVP_LOADER ( NOM position (1:5)

Rsultat :
1* select * from dvp_loader

NOM SALAIRE -------------------- ---------Jaoua orafr loan bouya Nuke_ sheik pomal titid aline denis niour 11 ligne(s) slectionne(s).)

V-K. Les Index sont mis jour lors du chargement


Oui les index et cls primaires sont maintenus. Il est possible de dsactiver cette option notamment pour des contraintes d'optimisation en indiquant le paramtre = skip_index_maintenance = FALSE

V-L. Comment charger diffrents fichiers dans la mme table


Il faut le spcifier dans le contrle file ;
LOAD DATA INFILE 'data.csv' INFILE 'data2.csv' -- deuxime fichier TRUNCATE INTO TABLE DVP_LOADER FIELDS TERMINATED BY ';' ( NOM , salaire )

Le rsultat :
SQL> r

9 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

1*

select * from dvp_loader

NOM SALAIRE -------------------- ---------Jaouad 100 orafrance 200 loanderson 300 bouyao 400 Nuke_y 500 sheikyerbouti 600 pomalaix 700 titides 800 aline 900 denisys 1000 niourk 1100 NOM SALAIRE -------------------- ---------Jaouad 100 12 ligne(s) slectionne(s).

V-M. Comment charger des donnes dans des colonnes " LONG string "
Les champs dont la longueur dpasse 255 caractres doivent tre spcifier dans le fichier de contrle. Par exemple un champ de type varchar2(2000) ou char(1000) doivent tre dclars dans le CTL ainsi.
LOAD DATA INFILE 'data.csv' TRUNCATE INTO TABLE DVP_LOADER when (1:6) <> 'Jaouad' FIELDS TERMINATED BY ';' ( NOM CHAR(2000) )

Notons que le dclaration du champ se fait toujours en CHAR(x) que la colonne soit effectivement du char ou mme varchar2

V-N. Comment crer une table externe avec le fichier de contrle.


Il est possible de se servir du fichier de contrle de Sql*Loader afin de pouvoir crer une table externe. voici la dmarche :
SQL> r SQL> create directory loader as 'c:\load' ; Rpertoire cr. SQL> grant read, write on directory loader to DVP; Autorisation de privilges (GRANT) accepte. conn dvp/dvp SQL> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE TABLE dvp_ext ( nom varchar2(10), salaire number ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY loader ACCESS PARAMETERS (FIELDS TERMINATED BY ';' ( NOM , SALAIRE ) ) LOCATION ('data.csv') ) PARALLEL REJECT LIMIT UNLIMITED ;

Table cre. SQL> select * from dvp_ext ; NOM SALAIRE ---------- ---------Jaouad 100 orafrance 200 bouyao 400 Nuke_y 500 pomalaix 700 titides 800 aline 900 denisys 1000 niourk 1100 9 ligne(s) slectionne(s). SQL>

Pour en savoir plus sur les tables externes

10 sur 11

10/01/2010 21:25

Sql*Loader - Club des dcideurs et professionnels en Informatique

http://jaouad.developpez.com/sqlldr/

V-O. Comment charger des images avec Sql*Loader.


Il est possible d'effectuer des insertions de Blob via Sql*Loader en paramtrant correctement le fichier de contrle :
LOAD DATA INFILE 'image.dat' INTO TABLE DVP_LOADER FIELDS TERMINATED BY ';' ( external_filename FILLER CHAR(50), "BLOBDATA" LOBFILE(external_filename) TERMINATED BY EOF )

V-P. Comment parallliser les chargements.


Ici nous allons essayer de parallliser les chargements, combinant cette option avec le chemin direct nous esprons avoir des temps de traitements rduits.
C:\load>sqlldr userid=formation/formation control=control.txt log=log.txt bad=bad.txt discard=disard.txt direct=y errors=0 parallel=TRUE

Extrait du fichier Log :


SQL Chemin utilis: Direct - avec option parallle.

Table DVP_LOADER, charg partir de chaque enregistrement physique. Option d'insertion en vigueur pour cette table : APPEND

L'option Parallelel n'est diposnible qu'avec la clause APPEND, sinon une erreur SQL*Loader-279: risque de subvenir.

Les sources prsentes sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Jaouad ZOUAGHI. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. Cette page est dpose la SACD.

Responsable bnvole de la rubrique Oracle : - Contacter par email Vos questions techniques : forum d'entraide Oracle - Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'quipe de rdaction du club d'entraide des dveloppeurs francophones Nous contacter - Hbergement - Participez - Copyright 2000-2010 www.developpez.com - Legal informations.

11 sur 11

10/01/2010 21:25