Permettez-moi de vous montrer un exemple de fichier de contrôle que j'utilise pour charger un très gros fichier (120 millions d'enregistrements par jour)
OPTIONS (SKIP=0, ERRORS=500, PARALLEL=TRUE, MULTITHREADING=TRUE, DIRECT=TRUE, SILENT=(ALL))
UNRECOVERABLE
LOAD DATA
CHARACTERSET WE8ISO8859P1
INFILE '/path_to_your_file/name_of_the_file.txt'
BADFILE '/path_to_your_file/name_of_the_file.bad'
DISCARDFILE '/path_to_your_file/name_of_the_file.dsc'
APPEND
INTO TABLE yourtablename
TRAILING NULLCOLS
(
COLUMN1 POSITION(1:4) CHAR
,COLUMN2 POSITION(5:8) CHAR
,COLUMN3 POSITION(9:11) CHAR
,COLUMN4 POSITION(12:18) CHAR
....
....)
Quelques considérations
- Le chargement par positions est toujours plus rapide que l'utilisation de délimiteurs
- Utiliser les options de
PARALLEL
,MULTITHREADING
etDIRECT
pour optimiser les performances de chargement. UNRECOVERABLE
est également un bon conseil si vous avez toujours le fichier au cas où vous auriez besoin de récupérer la base de données, vous auriez besoin de charger à nouveau les données.- Utilisez le jeu de caractères approprié.
- La clause TRAILING NULLCOLS indique à SQL*Loader de traiter toutes les colonnes relativement positionnées qui ne sont pas présentes dans l'enregistrement comme des colonnes nulles.
- La position signifie que chaque ligne contient des données sans aucun délimiteur, vous connaissez donc la position de chaque champ dans le tableau par la longueur.
AAAAABBBBBBCCCCC19828733UUUU
- Si votre fichier txt ou csv a un séparateur de champs, disons un point-virgule, alors vous devez utiliser le
FIELDS DELIMITED BY
Ceci est stocké dans un fichier de contrôle, normalement un fichier texte avec l'extension ctl. Ensuite, vous invoquez à partir de la ligne de commande
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl