|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Bonjour.
Je me retrouve confronté à un problème avec un bête delete dans une base oracle 9.2.0.8 : Code :
DELETE FROM TABLE_MACHIN WHERE DATE_MOD < sysdate - 100 ; On a remarqué (dans le curseur d'un autre programme plus complexe) qu'en faisant un commit toutes les 10.000 transactions, on s'affranchissait de ce problème. Ma question : Existe-t-il un moyen simple d'imposer un commit tous les 10.000 trasactions en faisant quelque chose de plus propre qu'une boucle avec curseur et compteur ? Merci. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
X lignes à supprimer = X entrées UNDO + X entrées REDO = Y To d'archivelog
et ce, quelque soit la fréquence des commits, ou qu'il y ait ou pas un commit d'ailleurs ! Faire des commits périodiques permettra juste de marquer comme réutilisables des entrées d'UNDO et donc nécessitera moins de place en UNDO, mais c'est tout. |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Mon problème vient du stream entre mes 2 bds.
La version sous 9i2 provoque pléthore de transferts de données entre les bases - même quand des données n'ont pas à être utilisé sur le serveur cible... Et lorsque l'on fait plus de 10.000 transactions (environ... source : test maison... ), on arrive à un équilibre entre le transfert des données et les créations de fichiers. Sinon, c'est l'engorgement et le serveur cible se noie en créant un décalage qui a mis 24 h pour se résorber au dernier test... Donc, Léo, je ne doute pas du bien fondé de tes dires mais mon problème est ailleurs, avec cet obscur stream. De plus, ce sont des tables plutôt petites (qq 100.000 lignes tout au plus) donc le problème ne vient pas de la place manquante. Dans le même genre de problème, un Code :
CREATE TABLE TOTO AS SELECT * FROM MACHIN |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
dans ce cas, à votre question
Citation:
mais y'a quand même un truc qui m'échappe... Code :
DELETE FROM TABLE_MACHIN WHERE DATE_MOD < sysdate - 100 ; par ailleurs, y-a-t-il des triggers qui pourraient provoquer des opérations supplémentaires ? |
|
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Citation:
Citation:
En fait, il y a juste un trigger "Before Each Row" pour incrémenter la séquence de l'id de l'enregistrement. Je lance cette ligne de code par du SQL dynamique (je fais ça sur plusieurs tables et je fais un commit après chaque delete) mais je ne crois pas que cela ait une influence sur mon problème puisque dans une autre procédure je lance du sql dynamique (pour supprimmer un seul enregistrement) mais avec un commit tous les 10.000 modifs. Et ça roule bien, celui-là. |
||
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Bon ben il se trouve que mon client m'a raconté des bétises...
![]() C'est sûr, s'il utilise seulement la moitié des programmes qu'il me demande de modifier...
|
|
|
00
|
|
|
#7 | ||||
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 221 ![]() |
Si je comprends bien:
Code :
Code :
|
||||
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Merci, j'avais fait un truc analogue, mais de toute façon, ce n'est plus utile maintenant.
Note : j'utilise du sql dynamique parce que je fais le même traitement sur une poignée de tables. Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com