SQLLoader

De wiki.nexiat.fr
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 WHEN de 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 KEY et UNIQUE sont vérifiées (pas les contraintes de clé étrangère ni les CHECK complexes) ;
    • les triggers INSERT ne sont pas déclenchés ;
    • la table est verrouillée en exclusif pendant le chargement, les autres sessions ne peuvent pas la modifier.

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).

Voir aussi

  • Expdp / Impdp — échange de données entre bases Oracle (Datapump), différent de SQL*Loader
  • Exp — ancien outil d'export/import Oracle
  • RMAN — sauvegarde physique de la base