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

PL/SQL Oracle Discussion :

Update d'un grand nombre de lignes d'une grosse table


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut Update d'un grand nombre de lignes d'une grosse table
    Bonjour à tous,


    Voilà, je suis à la recherche de la meilleur solution pour réaliser un update dans mon cas.
    Nous souhaiterions mettre à jour environ 400 000 000 lignes dans une table de 1 000 000 000 lignes.


    Nous hésitons sur plusieurs solutions, et je ne me rends pas trop compte de ce qui peut etre le plus efficace.

    Moi, ma solution serait la suivante :
    Solution 1 :
    on crée une nouvelle table de structure identique
    On alimente la nouvelle table avec un insert et en modifiant les valeurs au passage qui nous intéresse.
    On echange les deux tables.
    Mes collègues ont proposé d'autres solutions :
    Solution 2 :
    On crée une boucle for sur la table et on met à jour ligne par ligne avec un commit entre chaque.
    Solution 3 :
    On extrait les lignes dans une nouvelle table et on les modifie
    On supprime les lignes dans la table d'origine et on les ré-insère modifiées
    Sachant que d'un point de vue technique, nous avons quand même les contraintes suivantes :
    1. La table recoit en permanence des nouveaux records
    2. Des package font réference à la table
    3. La table doit restée accessible
    Je ne sais pas trop comment ces contraintes peuvent influencer l'alimentation et les mise à jour de la table.

    Quelle solution me conseilleriez vous ? avez vous d'autres solutions à proposer ?

    Merci d'avance.


    Steven

  2. #2
    Expert confirmé 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
    Par défaut
    Testez par vous même et revenez nous faire part de vos conclusions.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Juste pour préciser, la solution 1 doit se faire en create table as select ou alors alimentation en mode append, l'objectif de cette solution étant de ne pas générer d'undo.
    Et avant d'échanger les tables, il ne faut pas oublier de redonner les droits, reconstruire les index, les triggers...

    La solution 2 n'est presque pas testable, 400 millions en ligne par ligne c'est super lent...
    Avec un commit à chaque ligne, c'est encore plus lent et ça finira par un snapshot too old.

    La solution 3 supprime et réinsere... ça génère plus d'undo que juste mettre à jour, quel serait l'intérêt ?

    Sachant que d'un point de vue technique, nous avons quand même les contraintes suivantes :
    ...
    Le package DBMS_REDEFINITION permet une implémentation à chaud de la solution 1.

  4. #4
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    Merci beaucoup pour cette réponse.
    C'est pile ce dont j'avais besoin

    Je vais étudier ce package et voir ce que je peux en tirer.

    Soit dit en passant, mes chefs sont plus pour implementer la solution 2

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

Discussions similaires

  1. [2000] Meilleure méthode pour insérer un grand nombre de lignes
    Par nicodev24 dans le forum Développement
    Réponses: 11
    Dernier message: 31/10/2016, 11h25
  2. [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
  3. Réponses: 3
    Dernier message: 26/03/2013, 17h47
  4. Macro Solver pour un grand nombre de ligne
    Par hochimi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/07/2007, 23h20
  5. vue récupérant un grand nombre de lignes
    Par pointe dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/12/2006, 19h29

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