Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2008, 14h14   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 47
Points : 13
Points : 13
Envoyer un message via MSN à pconrad
Par défaut DELETE Trop long

Salut,

Je supprime plusieurs table avec de nombreuses lignes.

Cela prend un temps monstrueux. Prés de 2 heures !?

TRUNCATE ne peut pas fonctionner du fait de nombreuses FOREIGN KEY.

Comment accélérer les choses !

Merci.
pconrad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 14h25   #2
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Bonjour,


C'est une opération que tu fais au fil de l'eau ou bien une fois ponctuellement (genre purge de données) ?

Ton perimètre de suppression est simple ou il est complexe à déterminer ? Tu peux poster ta requete ?

Quelle proportion de ligne gardes tu ?

Ce qui peut ralentir ta suppression : les triggers, les indexes...

Si operation one shot, tu peux disabler les foreigns key qui pointent sur ta table, puis les triggers de cette table et ses indexes si tu es sur que tu peux te passer de ce que font les triggers éventuels.

Si la proportion de ligne a garder est faible, tu peux créer une nouvelle table ne contenant que les données à garder et recréer dessus à la fin les indexes , triggers & contraintes de ta table initiales.


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...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 14h57   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 47
Points : 13
Points : 13
Envoyer un message via MSN à pconrad
Citation:
Envoyé par lalystar Voir le message
Bonjour,


C'est une opération que tu fais au fil de l'eau ou bien une fois ponctuellement (genre purge de données) ?
C'est une purge. J'efface l'intégralité des données, sauf les tables d'aides.

Citation:
Ton perimètre de suppression est simple ou il est complexe à déterminer ? Tu peux poster ta requete ?
Ce sont juste des DELETE FROM MaTable;

Citation:
Quelle proportion de ligne gardes tu ?

Ce qui peut ralentir ta suppression : les triggers, les indexes...
Il y a de nombreuses clés étrangères.

Citation:
Si operation one shot, tu peux disabler les foreigns key qui pointent sur ta table, puis les triggers de cette table et ses indexes si tu es sur que tu peux te passer de ce que font les triggers éventuels.

Si la proportion de ligne a garder est faible, tu peux créer une nouvelle table ne contenant que les données à garder et recréer dessus à la fin les indexes , triggers & contraintes de ta table initiales.


Laly.
Je sens que je vais tester le DROP sur les tables les plus longues..
pconrad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h46   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
C'est parce que tu fais pas tes truncates dans le bon ordre. Tu dois d'abord vider les tables filles et ensuite les mères et là tu pourras remplacer tes DELETE par des TRUNCATE
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 16h08   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 47
Points : 13
Points : 13
Envoyer un message via MSN à pconrad
Citation:
Envoyé par orafrance Voir le message
C'est parce que tu fais pas tes truncates dans le bon ordre. Tu dois d'abord vider les tables filles et ensuite les mères et là tu pourras remplacer tes DELETE par des TRUNCATE
Idem pour le delete, il faut effacer les tables filles en premier.
pconrad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 16h15   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Sauf DELETE CASCADE

Mais comme tu le fais pour le DELETE apparemment j'vois pas pourquoi tu fais pas un TRUNCATE
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 23h51   #7
Membre du Club
 
Inscription : janvier 2008
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 50
Points : 47
Points : 47
Citation:
Envoyé par orafrance Voir le message
C'est parce que tu fais pas tes truncates dans le bon ordre. Tu dois d'abord vider les tables filles et ensuite les mères et là tu pourras remplacer tes DELETE par des TRUNCATE
Erreur, pour pouvoir faire un truncate sur une table, aucune foreign key ne doit référencer cette table (pas de tables filles).

Solution :
-1- désactiver toutes les foreign key (un peu plus simple que seulement celles nécessaires)
-2- truncate de toutes les tables à purger
-3- activation de toutes les contraintes désactivées
wondersonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 09h08   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Je ne me rappelais pas que même si les tables filles sont vides ça pose problème

En plus les scripts d'activation/désactivation des contraintes est dispo sur le site
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2008, 09h52   #9
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 47
Points : 13
Points : 13
Envoyer un message via MSN à pconrad
Citation:
Envoyé par orafrance Voir le message
Je ne me rappelais pas que même si les tables filles sont vides ça pose problème

En plus les scripts d'activation/désactivation des contraintes est dispo sur le site
Ok, j'ai trouvé les scripts. Une fois exécuté, le trucante fonctionne. Je passe de 45mn à 2mn.

Merci beaucoup !
pconrad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h22.


 
 
 
 
Partenaires

Hébergement Web