Documente Academic
Documente Profesional
Documente Cultură
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
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
http://jaouad.developpez.com/sqlldr/
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
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.
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.
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. (... )
2 sur 11
10/01/2010 21:25
http://jaouad.developpez.com/sqlldr/
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...
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
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 ).
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.
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
4 sur 11
10/01/2010 21:25
http://jaouad.developpez.com/sqlldr/
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.
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
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 :
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.
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
Le fichier Log :
6 sur 11
10/01/2010 21:25
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
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>
7 sur 11
10/01/2010 21:25
http://jaouad.developpez.com/sqlldr/
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
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 ) .
8 sur 11
10/01/2010 21:25
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).
Rsultat :
1* select * from dvp_loader
NOM SALAIRE -------------------- ---------Jaoua orafr loan bouya Nuke_ sheik pomal titid aline denis niour 11 ligne(s) slectionne(s).)
Le rsultat :
SQL> r
9 sur 11
10/01/2010 21:25
http://jaouad.developpez.com/sqlldr/
1*
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
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>
10 sur 11
10/01/2010 21:25
http://jaouad.developpez.com/sqlldr/
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