Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
782 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [ORACLE] Suppression gd nombre enregistrements

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ORACLE] Suppression gd nombre enregistrements

n°204538
shyangel
Posté le 29-08-2002 à 13:09:30  profilanswer
 

Bonjour à toutes et à tous,  
 
J'ai une application VB qui appelle une procédure stockée pour supprimer un grand nombre d'enregistrement dans une table (un peu plus d'un million de lignes). Le problème est que cette opération est vraiment trop longue et je voudrais savoir quel(s) moyen(s) je pourrais utiliser pour accélérer l'exécution.  
Dans la procédure stockée, j'affecte un gros rollback segment spécialement pour la requête DELETE. J'ai essayé de découper la requête en plusieurs sous-requêtes mais ça ne change pas grand chose.  
 
Merci pour vos lumières ...
 
PS : pas de TRUNCATE car je ne dois pas supprimer tous les enregistrements de la table

mood
Publicité
Posté le 29-08-2002 à 13:09:30  profilanswer
 

n°204588
irulan
Posté le 29-08-2002 à 14:27:48  profilanswer
 

Il n'y a pas une option du genre NO LOG (ou NO LOGGON je ne sais plus bien) qui permet d'effectuer une opération sur la base sans que cela soit inscrit dans le journal ?
 
Ca devrait être plus rapide je pense ?

n°204633
shyangel
Posté le 29-08-2002 à 15:03:56  profilanswer
 

Je ne connais pas cette option mais si tu retrouves comment on l'utilise, je suis preneur.
 
J'ai plusieurs choses à faire en même temps et là j'ai un bug à corriger assez rapidement.
 
Merci pour ton aide.

n°204651
tomlameche
Et pourquoi pas ?
Posté le 29-08-2002 à 15:22:30  profilanswer
 

shyangel a écrit a écrit :

Je ne connais pas cette option mais si tu retrouves comment on l'utilise, je suis preneur.
 
J'ai plusieurs choses à faire en même temps et là j'ai un bug à corriger assez rapidement.
 
Merci pour ton aide.




Faut faire :
alter table nom_table nologging;

n°204693
vttman2
Je suis Open ...
Posté le 29-08-2002 à 15:50:34  profilanswer
 

Il s'effectue quand ton delete, en pleine journée avec
plein d'utilisateurs qui bosse sur ta table
ou le soir quand ya personne ?

n°204736
shyangel
Posté le 29-08-2002 à 16:30:59  profilanswer
 

vttman2 > En ce moment on est en phase de test, je ne suis pas sur le site du client mais sur un serveur spécial qu'on a pour le projet. Je suis le seul à travailler dessus (PIII 866 avec RAM 256Mo) donc pas de surcharge d'autres utilisateurs.
 
tomlameche > Merci, j'essaierai dès demain, parce que pour le moment, j'ai ma procédure qui tourne.

n°204739
irulan
Posté le 29-08-2002 à 16:32:29  profilanswer
 

tom > Oracle master [:prosterne2]

n°204753
vttman2
Je suis Open ...
Posté le 29-08-2002 à 16:45:23  profilanswer
 

Ok  
En fait je te posais cette question parceque
dans certaines sociétés on préfère faire
au lieu d'un DELETE TAB1
un truc du style
 
CREATE table TEMP  
INSERT des enregistrements conservés à partir de TAB1
DROP table TAB1
RECOPIE de TEMP dans TAB1
DROP table TEMP
 
... et tout ça pour gagner pas mal de temps
 
Mais bon ça dépend de la liaison des tables, contraintes ...
 
 
 

n°204756
irulan
Posté le 29-08-2002 à 16:49:20  profilanswer
 

vttman2 a écrit a écrit :

Ok  
En fait je te posais cette question parceque
dans certaines sociétés on préfère faire
au lieu d'un DELETE TAB1
un truc du style
 
CREATE table TEMP  
INSERT des enregistrements conservés à partir de TAB1
DROP table TAB1
RECOPIE de TEMP dans TAB1
DROP table TEMP
 
... et tout ça pour gagner pas mal de temps
 
Mais bon ça dépend de la liaison des tables, contraintes ...




 
En plus autre avantage du drop Table : ça libère vraiment l'espace disque (contrairement au delete).
 
en ce qui concerne les contraintes, tu galère la première fois que tu fais le drop, mais en copiant dans un fichier les script d'inactivation (puis réactivation) des contraintes, ça redevient rapide.


Message édité par irulan le 29-08-2002 à 16:49:41
n°207324
shyangel
Posté le 02-09-2002 à 16:41:59  profilanswer
 

J'ai essaye les 2 méthodes :
 
  - alter table nom_table nologging : pas très efficace, je n'ai pas vu de changement dans les temps ou alors c'était très faible.
 
  - create temp as select ... from nom_table
    drop table nom_table
    rename temp to nom_table  
    Cette solution est très rapide, beaucoup plus que ce que je pouvais espérer :)  
 
Merci pour tout  ;)  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [ORACLE] Suppression gd nombre enregistrements

 

Sujets relatifs
[C++] Nombre d'éléments d'un tableau dynamique ???[Java] Suppression d'un BLOB en base (Oracle 9i)
[Oracle] Package invalid[Oracle] Optimisation des paramètres Oracle, update de masse
Calcul du nombre de jours entre 2 datesoracle 8 sur debian, erreur : ORA-03113
[Java] Soucis de connexion Oracle 9.1 avec Weblogic 6.1nombre d'objet ds un doc XML (avec un parseur de type DOM)
[Java + WebObject] Suppression d'une ligne d'une bd (Resolu) 
Plus de sujets relatifs à : [ORACLE] Suppression gd nombre enregistrements


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR