25 février 2016

Sqlload - Cas du chargement DIRECT

Michel a testé le chargement "DIRECT LOAD PATH" lors de chargements de partitions ZX vides suite à des NOY / NOZ. Dans ce cas les performances sont excellentes, mais quelques précautions sont à prendre :

  • La commande sqlldr prend la syntaxe suivante :

sqlldr \
userid=${DB_CONX} \
data=${FICDAT} \
control=${FICCTL} \
log=${FICLOG} \
bad=${FICBAD} \
silent=\(header,feedback,discards\) \
errors=9999999 \
direct=true


(pour rappel, un article précédent conseille d'augmenter bindsize et readsize)

Contrôler l'absence d'erreur SQL*Loader-2026 (elle signifie que l'import s'est arrêté).

  • Charger la **00 par LOAD normal
Puis les autres tables par DIRECT PATH LOAD.

  • Dans le fichier de contrôle préciser pour la TD11 l'option 'SINGLEROW'
Ainsi chaque enregistrement chargé sera immédiatement commité, sans quoi il y aura erreur lors des insertions en ZXTD12.

  • Si les tables sont partitionnées préciser la partition ciblée


Fichier de commandes (exemple avec ZXTD11) :

LOAD INFILE SYSZX.DAT APPEND PRESERVE BLANKS INTO TABLE HR.ZXTD11
SINGLEROW
PARTITION(MT201501) WHEN ( 5:8 ) = 'ZX*1'
( NUDOSS POSITION ( 0009 ) INTEGER EXTERNAL ( 10 ) ,
CDSOC POSITION ( 0019 ) CHAR ( 0003 ) ,
PGPDOS POSITION ( 0022 ) INTEGER EXTERNAL ( 10 ) ,
...



  • L'import va dévalider certaines contraintes référentielles et des index .
Il faut donc ajouter une revalidation des contraintes et vérifier les index
 

Pour générer les ordres SQL (ici sur ZX) :

select 'ALTER TABLE '||table_name||' ENABLE CONSTRAINT '||constraint_name ||';' from all_constraints where table_name like 'ZX%' and STATUS = 'DISABLED';

et

select table_name, index_name , status from all_indexes where table_name like 'ZX%' and STATUS not in ('VALID','USABLE','N/A') ;

select index_name, partition_name, status from all_ind_partitions where index_name in ( select index_name from all_indexes where table_name like 'ZX%' ) and STATUS not in ('VALID','USABLE','N/A') ;