IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Performance de SQL LOADER


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 211
    Par défaut Performance de SQL LOADER
    Salut à tous,

    Toujours dans le cadre de l'optimisation de mon programme, je voudrais savoir s'il l'on peut optimiser le chargement (SQL*LOADER) d'un fichier plat dans une table ?

    Mon fichier peut faire de 200 000 à 3 000 000 de lignes à charger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    LOAD DATA
    INFILE '/DEVL/INPUT/ME_CIBLE.txt'
    INTO TABLE XXCIH.interface
    APPEND
    (
    	LIGNE_ME 			POSITION(1:385)  CHAR
    ,	DATE_CREATED 			SYSDATE 
    , 	CURRENCY_CODE			POSITION(33:35)  CHAR
    , 	REF_PIECE			POSITION(25:29)	 CHAR
    , 	DESC_LIGNE			"ltrim(rtrim(substr(:LIGNE_ME,89,32))) || ' ' || ltrim(rtrim(substr(:LIGNE_ME,121,32)))"
    , 	ATTR1_ME_1			POSITION(1:150)	CHAR
    , 	ATTR2_ME_2			POSITION(151:300)	CHAR
    , 	ATTR3_ME_3			POSITION(301:385)	CHAR
    , 	ATTR4_NUM_COMPTE		POSITION(1:16)		CHAR
    , 	ATTR6_CODE_TRAN_OPE		"ltrim(rtrim(substr(:LIGNE_ME,153,4))) || '/' || ltrim(rtrim(substr(:LIGNE_ME,157,4)))"	 
    , 	ATTR7_AG_MAT			"ltrim(rtrim(substr(:LIGNE_ME,181,3))) || '/' || ltrim(rtrim(substr(:LIGNE_ME,184,4)))"
    , 	ATTR8_DENOT2			POSITION(198:213)		CHAR
    , 	ATTR10_NUM_PIECE		POSITION(190:197)		CHAR
    , 	REGLE				"decode(nvl(ltrim(rtrim(substr(:LIGNE_ME,215,1))),'0'),'1',ltrim(rtrim(substr(:LIGNE_ME,310,5))),NULL)"
    , 	JOURNAL				"decode(nvl(ltrim(rtrim(substr(:LIGNE_ME,215,1))),'0'),'1',ltrim(rtrim(substr(:LIGNE_ME,290,10))),'CIH_AUTRE_0')"
    , 	ORIGINE				"decode(nvl(ltrim(rtrim(substr(:LIGNE_ME,215,1))),'0'),'1',ltrim(rtrim(substr(:LIGNE_ME,300,10))),'CIH_AUTRE_0')"
    			)
    Merci à vous.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Si tu peux passer par une table externe, je pense que c'est plus rapide sur des gros volumes.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 211
    Par défaut
    Bonjour,

    Je n'ai pas compris ton idée...

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    External Tables Concepts

    Et un exemple d'utilisation dans la section Pipelined Functions de l'article où peut être que le process global peut t'intéresser

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 211
    Par défaut
    Merci.

    J'ai lu quelques commentaire sur le sujet, et apparemment, il vaut mieux utiliser les tables Externes si l'on veut simplement faire des SELECT sur les données, alors que dans mon cas, je les charges dans une table et s'en suit une multitude d'UPDATE et DELETE sur la dite table.

    A votre avis, SQL*LOADER parait le choix le plus judicieux?

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Non je ne suis pas d'accord avec ta conclusion, dans l'article proposé la fonction pipelined permet de développer la partie transformation avant de loader les données validées.

    Par contre si tu conserves sql*loader il ne faut pas loader les données dans la table finale, il faut créer une table de travail à partir de laquelle tu joueras ton process, ça permettra d'utiliser sql*loader en mode truncate + direct pour accélérer le load.

Discussions similaires

  1. Performance OCI vs SQL Loader
    Par falcon74 dans le forum Interfaces de programmation
    Réponses: 24
    Dernier message: 04/05/2009, 16h12
  2. Performance SQL Loader
    Par devdev2003 dans le forum SQL*Loader
    Réponses: 4
    Dernier message: 31/07/2007, 15h47
  3. Performance SQL LOADER
    Par devdev2003 dans le forum SQL*Loader
    Réponses: 3
    Dernier message: 02/05/2006, 12h01
  4. Réponses: 4
    Dernier message: 10/06/2004, 18h05
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo