SQL*Loader est, comme son nom l'indique un utilitaire de chargement spécifique pour les bases Oracle. Il permet d'initialiser une base de données, ou plus précisément une ou plusieurs tables avec des données issues d'un fichier texte.
Ainsi si l'on souhaite migrer des données d'un fichier Mainframe vers Oracle, on pourra extraire les données du fichier d'origine pour produire un fichier texte et ensuite utiliser SQL*loader pour effectuer le chargement automatique de la (ou des) table(s).
Ainsi si l'on souhaite migrer des données d'un fichier Mainframe vers Oracle, on pourra extraire les données du fichier d'origine pour produire un fichier texte et ensuite utiliser SQL*loader pour effectuer le chargement automatique de la (ou des) table(s).
Principales caractéristiques
- charge des fichiers texte externes dans Oracle
- format des fichiers d'entrée fixe ou variable (avec séparateur)
- utilisation de fonctions SQL
- génération de clés uniques
- mode "direct" optimisé
- gestion des logs, des erreurs et possibilité de reprise
- format des fichiers d'entrée fixe ou variable (avec séparateur)
- utilisation de fonctions SQL
- génération de clés uniques
- mode "direct" optimisé
- gestion des logs, des erreurs et possibilité de reprise
Principe général
La (ou les) table(s) destination sont créées dans le schéma cible.
On précise le format des entrées et des sorties dans un fichier de paramétrage, appelé fichier de contrôle, créé avec un éditeur de texte. Un fichier log donnant les résultats du chargement est généré. En cas d'erreur, les enregistrements rejetés sont stockés dans un fichier '.bad', pour être éventuellement retraités.
On précise le format des entrées et des sorties dans un fichier de paramétrage, appelé fichier de contrôle, créé avec un éditeur de texte. Un fichier log donnant les résultats du chargement est généré. En cas d'erreur, les enregistrements rejetés sont stockés dans un fichier '.bad', pour être éventuellement retraités.
Commande minimale :
sqlldr nom_user/mot_de_passe@base control=nom_fic.ctl
sqlldr nom_user/mot_de_passe@base control=nom_fic.ctl
La structure de la table cible doit être créée avant le chargement, SQL*Loader à la différence d'autres outils ne crée pas la table.
Options de la ligne de commandes
option | description | Defaut |
userid | username et mot de passe | |
control | nom du fichier de controle du loader | |
data | nom du fichier de données d'entrée | |
log | nom du fichier de trace | |
bad | nom du fichier des enregistrements rejetés | |
parfile | nom du fichier contenant les parametres de la commande... | |
skip n | nombre d'enregistrement logiques à sauter | 0 |
load n | nombre à charger | all |
errors n | nombre max d'erreurs autorisées | 50 |
rows n | nb de lignes du tableau utilisé pour les entrées | 64 |
bindsize | taille du tableau précédent en bytes | OSdep |
silent | n'affiche plus les messages pendant l'execution | |
direct | utilise l'accès direct (direct path) | false |
parrallel | chargement en mode parrallelisé | false |
file | fichier d'allocation pour les chargement parralleles | |
discard | fichier des enregistrements non chargés intentionnellement (saut conditionnel) | |
discardmax | nombre maximums de ces enregistrements non chargés | all |
Mode de chargement
insert insère les datas dans une table vide
append insère les datas à la suite des données existantes
replace insère les datas en remplaçant les données existantes
truncate insère les datas après un TRUNCATE
append insère les datas à la suite des données existantes
replace insère les datas en remplaçant les données existantes
truncate insère les datas après un TRUNCATE
Exemple :
Table FS_SIZE_JOUR create table FS_SIZE_JOUR ( INSTANCE_NAME VARCHAR2(20) not null , DATE_FS DATE not null , FSSIZE VARCHAR2(20) not null ) ; create unique index PK_FS_SIZE_JOUR on FS_SIZE_JOUR( INSTANCE_NAME, DATE_FS ) ; Fichier de données à insérer dans la table fsdata.txt Séparateur virgule Serveur1,2008/10/21,4536.000000, Serveur2,2008/10/21,60865.000000, Serveur3,2008/10/21,83653.000000, Serveur4,2008/10/21,33440.000000, Serveur5,2008/10/21,83693.000000, Fichier de control SQLLOADER : APPEND INTO TABLE FS_SIZE_JOUR FIELDS TERMINATED BY ',' ( INSTANCE_NAME , DATE_FS DATE "YYYY/MM/DD" , FSSIZE "ceil(:FSSIZE)" ) Lancement du SQLLOADER : Insertion de champs par rapport à des positions dans le fichier : LOAD DATA INFILE 'fsdata.txt' APPEND INTO TABLE FS_SIZE_JOUR FIELDS TERMINATED BY ',' ( INSTANCE_NAME POSITION(01:20) , DATE_FS POSITION(21:30) DATE "YYYY/MM/DD" , FSSIZE POSITION(31:50) "ceil(:FSSIZE)" ) Si vous avez de gros chargement, il n’est peut être pas nécessaire de générer de gros fichiers RELO LOG pour des données qui peuvent être rechargées à tout moment. Pour cela utiliser le mot clef : UNRECOVERABLE en conjonction avec l’option DIRECT=TRUE, OPTIONS (DIRECT=TRUE ERRORS=10000 SILENT=(ERRORS, FEEDBACK) UNRECOVERABLE LOAD DATA INFILE 'fsdata.txt' APPEND INTO TABLE FS_SIZE_JOUR FIELDS TERMINATED BY ',' ( INSTANCE_NAME POSITION(01:20) , DATE_FS POSITION(21:30) DATE "YYYY/MM/DD" , FSSIZE POSITION(31:50) "ceil(:FSSIZE)" ) L'option rows=n avec n positionné à une grande valeur permet de faire descommit moins fréquent. Vous pouvez aussi désactiver les indexes et contraintes le temps du chargement. |