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 :

Insertion d'un grand nombre de Insert


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 23
    Points
    23
    Par défaut Insertion d'un grand nombre de Insert
    Bonjour,

    J'ai un fichier sql qui contient, plus ou moins, 10000 commandes d'Insert sur une vingtaine de table.

    J'utilise l'invite de commande sous PL/SQL developper. Tout se passe bien, sauf que le temps d'exécution est d'environ 40 minutes.

    J'avais pensé à utiliser SQL Loader mais je vois quil génère les fichiers à partir de fichiers plats. même si je génère un fichier de ce type. Je dois effectuer 20 fichiers différents avec 20 fichiers de contrôle différents (enfin j'ai découvert SQL loader aujourd'hui et vu la FAQ, je ne vois pas comment générer des données différentes pour des tables différentes.)

    Dois-je rester sous cette forme. Ou existe-il un moyen plus rapide ? (peut être est il possible avec SQL loader ?)

    Le fichier est très simple et du type:
    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
    24
    25
     
    --Insertion table 1
    INSERT INTO TABLE1(CHAMP1,CHAMP2,....,CHAMP N) VALUES (1.VALUES1, 1.VALUES2,...1.VALUES N);
    INSERT INTO TABLE1(CHAMP1,CHAMP2,....,CHAMP N) VALUES (2.VALUES1, 2.VALUES2,...2.VALUES N);
    INSERT INTO TABLE1(CHAMP1,CHAMP2,....,CHAMP N) VALUES (3.VALUES1, 3.VALUES2,...3.VALUES N);
    .
    .
    .
    INSERT INTO TABLE1(CHAMP1,CHAMP2,....,CHAMP N) VALUES (N.VALUES1, N.VALUES2,...N.VALUES N)
    -- Insertion table 2
    INSERT INTO TABLE2(CHAMP1,CHAMP2,....,CHAMP N) VALUES (1.VALUES1, 1.VALUES2,...1.VALUES N);
    INSERT INTO TABLE2(CHAMP1,CHAMP2,....,CHAMP N) VALUES (2.VALUES1, 2.VALUES2,...2.VALUES N);
    INSERT INTO TABLE2(CHAMP1,CHAMP2,....,CHAMP N) VALUES (3.VALUES1, 3.VALUES2,...3.VALUES N);
    .
    .
    .
    INSERT INTO TABLE2(CHAMP1,CHAMP2,....,CHAMP N) VALUES (N.VALUES1, N.VALUES2,...N.VALUES N)
    -- Insertion table N
    INSERT INTO TABLE N(CHAMP1,CHAMP2,....,CHAMP N) VALUES (1.VALUES1, 1.VALUES2,...1.VALUES N);
    INSERT INTO TABLE N(CHAMP1,CHAMP2,....,CHAMP N) VALUES (2.VALUES1, 2.VALUES2,...2.VALUES N);
    INSERT INTO TABLE N(CHAMP1,CHAMP2,....,CHAMP N) VALUES (3.VALUES1, 3.VALUES2,...3.VALUES N);
    .
    .
    .
    INSERT INTO TABLE N(CHAMP1,CHAMP2,....,CHAMP N) VALUES (N.VALUES1, N.VALUES2,...N.VALUES N)
    Merci beaucoup

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour,

    Peut être que je n'ai pas compris, mais tu veux inserer les mêmes données dans plusieurs tables, c'est bien ça ?
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Non justement. Ce sont des tables différentes avec des données différentes.

    exemple concret:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO PAYS (nom, poulation) values (FRANCE, 64102000);
    INSERT INTO PAYS (nom, poulation) values (ITALIE, 59131287);
    INSERT INTO REGIONS (nom, pays, nbVille) values ( Moselle, FRANCE, 124);
    INSERT INTO REGIONS (nom, pays, nbVille) values ( Lazio, ITALIE, 435);
    --etc...

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Tu peux faire un SQL*Loader en injectant tout dans une seule table sans index bien sûr et ensuite tu ventiles tes données avec des INSERT ... SELECT

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Chaque insert est unique ça fait 10000 inserts à parser, voilà pour quoi ça prends autant de temps. Normalement il faut utiliser des variables de bindings pour chaque type d'insert (par table). C'est ce que Sql*Loader fait!
    Ma question est la suivante: est ce-que tu contrôle la création du fichier qui contient les inserts?

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Le problème est que je ne peux pas toucher à la BDD sur la création de table. Juste sur l'insertion de données.

    En regardant SQL Loader, j'ai une question. Est il possible de mettre le Control File sous la forme:
    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
     
    LOAD DATA INFILE 'data1.csv'
    TRUNCATE
    INTO TABLE PAYS 
    FIELDS TERMINATED BY ';'
    (  NOM ,          
     POPULATION
    )
     
    LOAD DATA INFILE 'data2.csv'
    TRUNCATE
    INTO TABLE REGION 
    FIELDS TERMINATED BY ';'
    (  NOM ,          
     PAYS,
    NBVILLE
    )
    Je n'aurais qu'a lancer une seule fois SQL Loader après avoir changé la forme et separer mon gros fichier en plus petits fichiers.

  7. #7
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Je crois que l'exemple que tu donnes fonctionne (je n'utilise plus sqlldr tous les jours )

    Mais tu peux aussi faire un truc de ce style :
    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
    LOAD DATA
     INFILE *
     APPEND
     INTO TABLE PAYS WHEN tab = 'table1'
      FIELDS TERMINATED BY ','
       ( tab FILLER,
         NOM,
         population
       )
     INTO TABLE REGIONS WHEN tab = 'table2'
       FIELDS TERMINATED BY ','
       ( tab  FILLER,
         nom,
         pays,
         nbville
       )
    BEGINDATA
    table1,FRANCE,64102000
    table1,ITALIE,59131287
    table2,Moselle,FRANCE,124
    table2,Lazio,ITALIE,435
    là encore c'est à tester
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Merci !!

    En fait, j'ai changé de méthode. Il y avait d'autres paramètres a prendre en compte.

    Pou faire simple, je passe par sqlplus en invite de commande (avant j'utilisais PL/SQL develloper) et je met juste 5 minutes.

    Je n'ai pas pu tester SQL Loader (pour faute de temps) mais je reste curieux de l'essayer

    En tout cas merci de votre aide,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] SELECT, INSERT et UPDATE sur un très grand nombre de lignes pour faire un classement
    Par sagat06 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/04/2014, 18h52
  2. [MySQL] INSERT ou UPDATE pour un grand nombre d'enregistrements
    Par Phil.Antrope dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/12/2007, 17h24
  3. [SQL] Optimisation pour un grand nombre d'insertions
    Par ddelec24 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/08/2007, 14h33
  4. grand nombre d'insert
    Par whilecoyote dans le forum Oracle
    Réponses: 11
    Dernier message: 20/07/2005, 13h02
  5. UPDATE d'une grande table ou INSERT d'une petite ?
    Par bibile dans le forum Requêtes
    Réponses: 4
    Dernier message: 18/04/2005, 10h09

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