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

 Oracle Discussion :

insertion de masse


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut insertion de masse
    Bonjour,

    je suis sous oracle 10.2.0.4 et accessoirement sous linux.
    je dois recréer une table avec un partitionnement par année, et ensuite ré-injecter les données.

    Je suis dans cette phase.
    ma table fait 130 millions de lignes et 35 G.
    Actuellement je suis sur un simple

    insert into DHACCMVT select * from DTACCMVT2 where annee_mois = 200801 ; commit ;

    et je fais cela pour chaque mois.
    La problèmatique est la suivante, je dois livré la pré-prod depuis hier, j'ai commencer mes inserts en début d'aprém, mais chaque mois me prends 8 -10 min.

    Soit 10*12 = 120 min par ans, et il y a 8 ans .... (8*120 = trop longtemps -> 16 heures)

    Comment puis-je gagner du temps ?

    Merci

  2. #2
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Tu peux utiliser le sql dynamique, l'excellent EXECUTE IMMEDIATE dans une boucle pourrait resoudre ton problème.
    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Par défaut
    Je ne sais pas si cela marche.

    Mais en mettant la nouvelle table en mode nologging et en utilisant le hint "APPEND" cela ne fait t'il pas gagner beaucoup de temps ? ( forte diminution du volume de redo généré)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert /*+ append */ into
    voir ici

  4. #4
    Membre émérite Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Par défaut
    Datapump ne pourrait-il pas aider ?
    Tu exportes ta table DTACCMVT2 puis tu l'importes avec l'option remap_table et table_exists_action=append

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    Comme tu es en 10g tu peux aussi t'appuyer sur le package DBMS_REDEFINITION, qui permet de changer la définition d'une table pdt qu'elle reste accessible aux utilisateurs

    La procédure que tu peux suivre - A TESTER AU PREALABLE SUR UNE INSTANCE DE TEST - OF COURSE -

    --la table d'origine non partitionnée : MyOrigineTable de MySchema
    --On vérifie que la table peut être redéfinit en ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE DBMS_REDEFINITION.CAN_REDEF_TABLE(MySchema, MyOrigineTable);
    --Tu créé ta table partitionnée : MyDestTable dans MySchema
    --Tu lances le processus de rédéfinition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE DBMS_REDEFINITION.START_REDEF_TABLE(MySchema,MyOrigineTable, MyDestTable);
    --tu peux définir à ce niveau déclencheurs, indexs, contraintes...pour la table MyDestTable (cela soit manuellement, soit à l'aide de la procédure COPY_TABLE_DEPENDENTS)

    --pour terminer la redéfinition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE DBMS_REDEFINITION.FINISH_REDEF_TABLE(MySchema,MyOrigineTable,MyDestTable);
    Une fois test avant, éprouve la procédure proposée sur une instance de test
    bien cordialement,

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    Citation Envoyé par 13thFloor Voir le message
    Datapump ne pourrait-il pas aider ?
    Tu exportes ta table DTACCMVT2 puis tu l'importes avec l'option remap_table et table_exists_action=append
    c'est aussi une solution, et surtout avec la datapump on peut faire un import sans avoir besoin de générer un dump intermédiaire.

    Notre ami, a donc plusieurs solutions à 'bencher'

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut
    merci pour les réponses,
    petit soucis le remap_table ne doit pas exister en 10.2.0.4, dommage j'avais tout prévu pour le faire et quand j'ai voulus lancer le test : erreur ;-(

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    Citation Envoyé par olwin Voir le message
    Je ne sais pas si cela marche.

    Mais en mettant la nouvelle table en mode nologging et en utilisant le hint "APPEND" cela ne fait t'il pas gagner beaucoup de temps ? ( forte diminution du volume de redo généré)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert /*+ append */ into
    voir ici
    +1
    other solution que celle que j'ai déjà proposé

    en y ajoutant une couche de parallélisme
    tu lances ton batch of course dans les heures dédiées

Discussions similaires

  1. Insertion en masse dans table de fait
    Par niiccoo dans le forum Oracle
    Réponses: 19
    Dernier message: 29/05/2006, 11h56
  2. [HIBERNATE] Problème d'insert de masse en HQL
    Par ange bleu dans le forum Hibernate
    Réponses: 9
    Dernier message: 20/04/2006, 10h39
  3. [Optimisation] Insert en masse
    Par bobic dans le forum Oracle
    Réponses: 1
    Dernier message: 14/12/2005, 22h11
  4. [9i] Insertion de masse
    Par sygale dans le forum SQL
    Réponses: 2
    Dernier message: 05/12/2005, 10h51
  5. [Optimisation] Insertion en masse !
    Par m-mas dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/10/2005, 17h40

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