|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Bonjour,
J'ai une table très volumineuse (plusieurs centaines de millions de lignes). Je souhaite supprimer les lignes selon un critère, qui est le premier membre de la PK (un select count(*) avec un critère sur le champ est très rapide). Ca donne : Sauf que ça représente environ 95% des lignes de la table, donc c'est particulièrement volumineux. => Explosion du rollback segment et tout le tralala. Outre demander au DBA d'agrandir le tablespace temporaire, ou faire plusieurs requêtes avec un critère plus significatif, existe-t-il une option permettant de dire à Oracle "ben pour une fois, cette requête, tu la gères pas en transaction" ? En bref, faire un truncate avec une clause where. |
|
|
00
|
|
|
#2 | ||
|
Membre éclairé
![]() Inscription : novembre 2002 Messages : 533 ![]() |
Bonjour
Code :
__________________
PpPool |
||
|
|
10
|
|
|
#3 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Merci, je vais essayer cette syntaxe
![]() Le seul truc, c'est que ça me semble un peu limite si le volume de données qui reste après le DELETE est important (dans mon cas précis, ce n'est pas le cas, mais parfois, c'est l'inverse, j'ai besoin de supprimer 5%, qui sont pourtant déjà volumineux). Merci en tout cas. |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Développeur informatique Inscription : octobre 2006 Messages : 181 ![]() |
Tu peux peut etre faire des paquets de supression genre delete top 5000 from ...
dans une boucle ou autre ( je ne connais pas vraiment oracle mais en sybase par exemple on peut fixer le nombre de mises a jour autorisées) |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut !
Pour la méthode TRUNCATE, bien en discuter avec le DBA. Outre les FK à désactiver/répercuter, c'est du DDL, donc pas de déclenchement de triggers. De plus, si parmi "et tout le tralala" la redo log est une ressource critique également, tu peux avoir des problèmes lorsque ton système est en force logging (notamment pour dataguard). Et quoi qu'il arrive, il faut faire une sauvegarde avant et après... Bref, ça s'applique pas toujours très facilement. Et y'aurait pas éventuellement un problème de "design" si tu dois purger régulièrement cette table ultra volumineuse, de surcroît sur des quantités ultra volatiles ?
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
10
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 442 ![]() |
Tu peux supprimer par blocs de
Code :
DELETE msk WHERE codsoc = 100 AND rownum < 100000
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 315 ![]() |
Citation:
|
|
|
|
20
|
Copyright © 2000-2012 - www.developpez.com