SQLLoader
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Chargement de données externes |
| Commande | sqlldr
|
| Source typique | Fichier texte/CSV, y compris non-Oracle |
| Voir aussi | Expdp · Impdp · Exp |
SQL*Loader (sqlldr) charge des données depuis des fichiers externes (texte, CSV, longueur fixe...) vers des tables Oracle. Contrairement à Datapump, qui échange des données entre bases Oracle, SQL*Loader est l'outil à utiliser quand la source n'est pas une base Oracle (export d'une autre SGBD, fichier plat généré par une application tierce, etc.).
Fichiers de sortie
- fichier discard : enregistrements écartés volontairement (ne correspondent à aucune condition
WHENde chargement) ; - fichier bad : enregistrements rejetés pour cause de format invalide ou d'erreur de contrainte lors de l'insertion.
Chemins de chargement
- chemin conventionnel (par défaut) : passe par le moteur SQL standard (INSERT), tous les contrôles usuels s'appliquent (triggers, contraintes, verrouillage normal) ;
- chemin direct (
DIRECT=TRUE) : écrit directement au-dessus de la ligne de haute eau (high water mark) des blocs, beaucoup plus rapide sur de gros volumes, mais avec des limitations :- seules les contraintes
NOT NULL,PRIMARY KEYetUNIQUEsont vérifiées (pas les contraintes de clé étrangère ni lesCHECKcomplexes) ; - les triggers
INSERTne sont pas déclenchés ; - la table est verrouillée en exclusif pendant le chargement, les autres sessions ne peuvent pas la modifier.
- seules les contraintes
Mise en œuvre
sqlldr USERID=system/motdepasse CONTROL=balance.ctl LOG=balance.log
sqlldr PARFILE=balance.par
Le fichier de contrôle (.ctl) décrit la structure du fichier source et son mappage vers la table cible.
Exemple : longueur variable (champs délimités)
LOAD DATA
INFILE *
INTO TABLE personnes
APPEND
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
prenom, nom, sexe,
date_naissance "TO_DATE(:date_naissance,'YYYYMMDD')",
numero "seq_personnes.NEXTVAL"
)
BEGINDATA
Jean,DUPONT,M,19660826
Marie,MARTIN,F,19700114
Paul,"PETIT (JEUNE)",M,19361204
Exemple : longueur fixe (positions de colonnes)
LOAD DATA
INFILE *
INTO TABLE personnes
APPEND
TRAILING NULLCOLS
(
numero "seq_personnes.NEXTVAL",
prenom POSITION(01:10),
nom POSITION(11:22),
sexe POSITION(23:23),
date_naissance POSITION(24:31) "TO_DATE(:date_naissance,'YYYYMMDD')"
)
BEGINDATA
Jean DUPONT M19660826
Marie MARTIN F19700114
Paul PETIT M19361204
Console graphique
Un chargement SQL*Loader peut aussi être piloté depuis la console Oracle Enterprise Manager (Grid Control / Cloud Control selon la version) plutôt qu'en ligne de commande (à vérifier selon la version d'Oracle utilisée).