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 :

[9i] Exchanging Partitions


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [9i] Exchanging Partitions
    Bonjour,

    J'ai lu pas mal de littératures sur le Web où l'on conseille de charger les données dans une table temporaire, et après de faire un "alter table ... exchange partition ..." pour migrer les données dans la table partitionnée de destination.

    Devant construire une nouvelle version d'une application et de sa base en y incluant le partitionnement. Je voudrais connaître l'intérêt de charger des données dans une table en faisant après un échange, par rapport au simple fait de charger les données directement dans la partition.
    A priori, je ne vois pas de gain de performance, ni même de facilité accrue...
    Si quelqu'un pouvait éclairer ma lanterne.

    Je précise que j'utilise Oracle 9.2.0.7 avec du SQL*Loader en mode direct.

    Merci d'avance.

    http://www.stanford.edu/dept/itss/do...i.htm#i1107555
    For example, in data warehousing environments exchanging partitions facilitates high-speed data loading of new, incremental data into an already existing partitioned table.
    http://www.databasejournal.com/featu...le.php/3317621
    One of the most common ways of leveraging range partitioning techniques is to partition fact tables by date range, where each date range encompasses one load cycle for the table. The data is loaded into a separate table having exactly the same column definitions, constraints and indexes as the fact table. The constraints are enabled (sometimes), the indexes rebuilt (they will have been unusable for the load process to avoid overhead in maintaining and logging the indexes), and a "partition exchange" operation is executed to swap the data and index segments of the table with the data and index segments of a fact table partition. This DDL operation is extremely fast, and just as importantly, is as fast to reverse.

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour,


    Si tu charges directement dans ta table finale à partir de SQL*Loader par exemple, je ne vois effectivement pas l'intérêt.

    Là où c'est plus intéressant, c'est quand tu charges dans une table "temporaire", qu'ensuite tu fais de l'enrichissement de tes données, des contrôles d'intégrités, de la suppression de doublons... Une fois que tes données sont "cleans", tu peux les insérer dans ta table finale en une seule commande et les rendre disponibles à tes utilisateurs.
    En général, dans un datawarehouse, on charge les données dans un schéma dédié avant de les insérer dans les tables finales (Cf. http://www.developpez.net/forums/sho...&highlight=ODS)

    NB : à mon avis ca ne fonctionne que si tous tes indexes sur ta table partionnées sont locaux.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    J'ai enfin une réponse à cette question qui me taraudait l'esprit depuis plusieurs jours.


    Merci beaucoup pour ces informations.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par lalystar
    NB : à mon avis ca ne fonctionne que si tous tes indexes sur ta table partionnées sont locaux.
    A mon avis il est quand même déconseillé d'avoir un index local sur une table partitionné.
    Cela me rappelle l'histoire d'un DBA qui a crée un index global sur une table partitionnée,il supprime une partition et tout d'un coup ne comprends pas les perfs dsastreuses . ( En supprimant la partition l'index devient unusuable )

  5. #5
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Points : 95
    Points
    95
    Par défaut
    Pourrait-tu développer ton propos STP ?
    Je ne comprend pas l'intérêt de l'index global dans le cas d'une table partitionnée (surtout que tu donnes l'inconvéniant principal d'un tel index juste après). J'utilise tjs un index local dans ce cas sans me poser la question.

    @+,
    NicK.

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    ha trompé ayé corigé

  7. #7
    Membre averti Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Points : 408
    Points
    408
    Par défaut
    Il me semble que dans certain cas il est interessant d'avoir un index global malgré les defauts qu'ils ont et que vous venez de mettre en évidence.

    Pour une table avec N partitions et un index local sur un champ qui n'est pas la clé de partitionnement, Oracle doit lire les N indexes locaux pour verifier dans chacune des partitions si tu as la valeur recherchée. Tu fais donc N lectures au lieu d'une seule avec un indexe global.

  8. #8
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Le seul cas je pense, où il doit y avoir un index global est dans le cas d'une contrainte d'unicité qui ne contient pas la clé de partition.

    Sinon c'est que la clé de partionnement est peut être mal choisie si bcp de requête ne l'utilise pas et qu'il faut alors créer un index global.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  9. #9
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Points : 95
    Points
    95
    Par défaut
    +1 avec Lalystar & Wurlitzer.
    J'ai peut qu'il faille trancher au cas par cas selon l'utilisation faite de la table partitionnée.

    @+,
    NicK.

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

Discussions similaires

  1. Tentative d'exchange partition
    Par Vince7-7 dans le forum Oracle
    Réponses: 1
    Dernier message: 13/12/2012, 14h12
  2. Partition exchange bo data integrator
    Par fatimzahra dans le forum BODI
    Réponses: 0
    Dernier message: 22/06/2010, 12h18
  3. Slice sur Partitions
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/07/2003, 17h45
  4. Problème montage partition Win sous RedHat ??
    Par baba dans le forum Administration système
    Réponses: 6
    Dernier message: 18/01/2003, 11h26
  5. Exchange 5.5
    Par Jean-Jacques Engels dans le forum Composants VCL
    Réponses: 3
    Dernier message: 02/08/2002, 01h03

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