|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
bonjour,
Je suis en 11g, je voudrai partitionnement des tables trop lourdes, sans avoir à les recréer, mais j'ai du mal à trouver la syntaxe... quelque chose du style Code :
merci...
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
||
|
|
00
|
|
|
#2 |
![]() Inscription : décembre 2002 Messages : 2 387 ![]() |
Partitionner une table existante par un simple ALTER TABLE n'est malheureusement pas possible.
Une table ne peut être partitionnée qu'à sa création. Par contre, DBMS_REDEFINITION peut vous être d'une grande aide, et vous permettra pour ainsi dire de "transformer à la volée une table ordinaire en table partitionnée", sans devoir couper les accès à la table pendant sa transformation.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
aie....
bon, tout d'abord merci. je vais essayer d'utiliser ce package. J'ai trouvé un exemple complet, malheuresement en anglais. http://uhesse.wordpress.com/2010/02/..._redefinition/ merci bcp.
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|
|
00
|
|
|
#4 | ||
![]() Inscription : décembre 2002 Messages : 2 387 ![]() |
Voici un petit exemple commenté en français :
Code :
Vous devez donc créer votre table partitionnée (avec un nom quelconque temporaire), vide, sans contraintes ni index ni rien. La transformation va à vrai dire consister à transférer toutes les données de la table source vers cette table cible, et à y reporter index et contraintes. (On peut aussi si on le souhaite transformer non seulement la structure, mais aussi les données.) Elle va aussi intervertir les noms de table : à la fin, la table finale partitionnée a le nom d'origine, la table d'origine non partitionnée a le nom temporaire. Dans mon exemple, je ne partitionne pas, mais j'ajoute une colonne et j'en renomme une autre ; de plus je modifie les données. La procédure CAN_REDEF_TABLE vérifie si la table peut être redéfinie à la volée, car ce n'est pas toujours possible. START_REDEF_TABLE démarre les transformations. COPY_TABLE_DEPENDANTS transfère tous les objets attachés : index, contraintes, déclencheurs SYNC_INTERIM_TABLE est facultatif FINISH_REDEF_TABLE conclut les opérations, et effectue le renommage final.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
||
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
ca a le mérite d'être plus clair. Je vais m'y mettre...
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
bonjour,
Je remonte ce post pour deux questions (je sais qu'il y a un autre post sur le même sujet, mais je continue mes questions sur le mien !). 1- j'ai partitionné, en test, une table sur un critère de date (en gros, j'ai une partition des données 'actuelles' sur les 4 dernières années, et une autre des données considérées comme 'obsolètes'). Dois je ajouter un index sur ce critère de date pour accélerer la recherche dans la table, ou la partition sur ce critère suffit t-elle, sur ce point précis ? 2- comment puis-je faire des tests de performances sur une table AVANT/APRES partition (afin de savoir si ce que j'ai fait, est utile ?) 3- pourquoi je ne vois pas la taille des partitions, alors que je vois parfaitement le nombre d'enregistrements (je travaille sous Toad). merci,
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|
|
00
|
|
|
#7 | ||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
(a) pour améliorer la performance (b) pour faciliter la maintenance (c) pour faire des purges et des archivages Pour atteindre l'objectif (a) il faut tout de même que les nouvelles requêtes fassent de l'élimination de partition (partition pruning ou partition elimination). Pour que cela soit possible, il suffit que la clause where contienne le critère sur la clé de partitionnement (sur la date dans votre cas). L'index n'est pas nécessaire pour avoir cette elimination de partition. Par contre, si en plus de faire une elimination de partition, vous accédez à cette partition via un index ceci peut s'avérer intéressant. Lisez le lien suivant (il contient des informations valables) https://forums.oracle.com/forums/mes...247097#9247097 Citation:
|
||
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
tout d'abord merci pour cette longue réponse. J'essaie d'atteindre les trois objectifs, mais avant tout c'est un problème de performances, que je souhaite voire améliorées.
une chose me "choque" dans votre réponse. "N'oubliez pas que les inserts seront plus lent après qu'avant car oracle doit localiser la partition dans laquelle il va insérer" Soit, cela a l'air logique. Mais cela me chagrine...comment les améliorer, alors ? En contrepartie, puis je prétendre que les updates, et les select seront plus rapides, si dans le requete se trouve ce champ DATE, qui sert à différencier les deux partitions ? (sinon, je n'ai vraiment rien compris au partitionning...)
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|
|
00
|
|
|
#9 | |
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Ne vous inquietez pas pour les inserts. C'était juste pour votre information.
Citation:
Cependant, posez-vous la question suivante: A quoi sert de partitionner une table si vous avez l'intention de ne créer que deux partitions? Il faut voir le partitionnement comme étant une serie de tables plus petites en taille qu'on accède et manipule très facilement grâce à la clé de partitionnement. Si vous utilisez uniquement deux partitions, cela ne vaut pas le coup. |
|
|
|
00
|
|
|
#10 | ||
![]() ![]() |
Vous vous embêtez pour rien, en 11g vous avez le partitionnement par intervalle qui se charge de créer pour vous les nouvelles partitions.
Si votre table est déjà partitionnée vous pouvez rajouter l'intervalle à posteriori : Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#11 | |
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
Citation:
Donc, bcp moins d'enregistrements (70%), donc je suppose traitement plus rapide. Non ?
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|
|
|
00
|
|
|
#12 | |||
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
Citation:
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|||
|
|
00
|
|
|
#13 | |
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
Certes vous n'allez pas attaquer les 30 ans de données lors d'update mais je suppose que vous allez sélectionner ces données de temps à autres. N'est-ce pas? |
|
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
oui, vu comme çà....
bon, en même temps, tester çà sur une base de PROD était plutôt destiné à me familiariser avec les commandes RDBMS... merci pour ces remarques constructives !
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|
|
00
|
|
|
#15 | |||
![]() ![]() |
Citation:
Je sais juste que j'ai une table partitionnée par mois et que je ne fais rien dessus, le processus alimentant les données vérifie aussi s'il doit renommer une partition. Code :
__________________
Email : http://scr.im/waldar |
|||
|
00
|
|
|
#16 |
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 435 ![]() |
deux choses ;
1 - ![]() 2 - Bon, maintenant que j'ai commencé RDBMS...je vais continuer un peu pour bien comprendre le machin, et ensuite passer à ton explication ; comme je viens de passer ma base en 11g le mois dernier, autant comprendre... Merci bcp de ton intervention...
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|
|
00
|
|
|
#17 | |
![]() Inscription : décembre 2002 Messages : 2 387 ![]() |
Citation:
Je confirme ce que je disais plus haut : une table non partitionnée ne peut pas être transformée en table partitionnée par un simple ALTER TABLE. Il y a alors deux solutions : - Si la table n'est pas utilisée 24 heures sur 24, alors vous créez la table partitionnée et vous insérez dedans les données de la table normale - Si la table doit rester accessible 24 heures sur 24, alors il faut utiliser DBMS_REDEFINITION. Le partitionnement par intervalles automatiques (nouveauté V11) est juste une commodité pour l'ajout de partitions supplémentaires. Il peut être activé à deux moments : - lorsque vous créez la table partitionnée - plus tard, par ALTER TABLE, mais ceci exige que la table soit déjà partitionnée BY RANGE.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com