|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éprouvé
![]() Inscription : mars 2002 Messages : 574 ![]() |
quelle est la différence entre TRUNCATE et DELETE sans WHERE
lequel doit-on privilégier pour seulement enlever toutes les lignes d'une table afin de pouvoir par sql*loader la recharger intégralement |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Un truncate est plus rapide.
Il y a un commit implicite. Il ne faut pas que la table soit référencée par une FK
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#3 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Attention, Le fait que le commit soit implicite fait qu'un truncate est irrémédiable !
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Inscription : août 2005 Messages : 270 ![]() |
Delete, c'est du DML, cela efface les lignes.
Truncate, c'est du DDL, cela inscrit dans le dictionnaire du sgbd que la table est vide. Le temps de traitement d'un delete dépend du volume dans la table (nombre de lignes, volume disque à scanner, index à réaménager etc...). Truncate n'accede qu'au dictionnaire pour simplement dire que le table (et les index !) sont vides. Delete et truncate ne demandent pas les même privileges. Comme tout DDL, en effet, il y a un commit implicite. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Je peux en rajouter une ?
TRUNCATE ne déclenche pas les triggers ! (ouais, je suis content de moi, et alors ?
__________________
(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/ |
|
00
|
|
|
#7 | |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Citation:
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Étudiant Inscription : novembre 2004 Messages : 739 ![]() |
J'aimerai bien savoir quel point de la reponse de jmquiche le sous entend. Merci
__________________
"Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang |
|
|
00
|
|
|
#9 | ||
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Citation:
Citation:
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
||
|
00
|
|
|
#10 |
|
Membre éprouvé
![]() Étudiant Inscription : novembre 2004 Messages : 739 ![]() |
Salut,
Je n'ai toujours pas compris, c'est vrai que j'ai la tête dur. Est ce que tu essayes de me dire qu'une DDL ne déclenche pas de trigger?
__________________
"Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang |
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Non un DDL peut faire exécuter un trigger (exemple un ajout de colonne avec un defaut).
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#12 |
|
Membre éprouvé
![]() Étudiant Inscription : novembre 2004 Messages : 739 ![]() |
Ok, oublions ça. J'ai relu les messages calmement et j'ai essayé de comprendre.
C'est ce message qui m'a embrouiller l'esprit C'est différent de dire que "TRUNCATE" ne déclenche pas un trigger "DELETE".
__________________
"Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang |
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : juin 2008 Messages : 12 ![]() |
J'en ajoute une autre (également déjà sous-entendu) :
Les colonnes de type "auto-incrément" (IDENTITY par exemple) sont réinitialisées. |
|
|
02
|
|
|
#14 |
|
Membre Expert
![]() ![]() Demazy MbellaDéveloppeur Web Inscription : août 2010 Messages : 620 ![]() |
Oui la difference c'est que TRUNCATE ne déclenche aucun type de Trigger y compris les trigger de Type DELETE
__________________
Trois personnes peuvent garder un secret si deux d'entre elles sont mortes. :Benjamin FranklinL'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent : Benjamin FranklinLe hasard, c'est le déguisement que prend Dieu pour voyager incognito : Albert Einsteinbon je m'arrête là au risque de me faire buter
|
|
|
01
|
|
|
#15 |
![]() Inscription : décembre 2002 Messages : 2 401 ![]() |
Sauf que sous Oracle, qui est l'objet de ce forum, les colonnes de type auto incrément n'existent pas... Dommage d'avoir réveillé un sujet qui dormait depuis 3 ans pour être à côté de la plaque !
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
00
|
|
|
#16 |
![]() Inscription : décembre 2002 Messages : 2 401 ![]() |
Perdu ! Un déclencheur de type DDL peut parfaitement se déclencher suite à un TRUNCATE.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
00
|
|
|
#17 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
un truncate viole la sacro sainte read write consistency
![]() en effet, un truncate pendant un long select ou refresh de mv a un effet imprévisible |
|
00
|
|
|
#18 |
|
Membre confirmé
![]() Ahmed AANGOURDBA Etudes Oracle Inscription : janvier 2010 Messages : 123 ![]() |
Le DELETE est l'une des opérations les plus coûteuses dans Oracle.
En effet, lors d'un DELETE Oracle doit effectuer les opérations suivantes: - Rechercher les lignes à updater (équivalent à l'instruction SELECT) - Supprimer les lignes - Les entrées d’index qui référencent les lignes à supprimer doivent être supprimées de l’index - Exécuter le code des triggers BEFORE ou AFTER DELETE. - Vérifier s'il existe des lignes dans une autre table enfant qui référencent des lignes à supprimer dans la table parent (d'ailleurs si la table enfant est volumineuse et qu'il n'existe pas d'index pour la Foreign key cette partie du DELETE peut être cause de lenteur). - S'il existe des lignes enfants et que la FK est définie en mode "ON DELETE CASCADE" alors ces lignes doivent aussi être supprimées (triggers déclenchés+MAJ des index etc.) - Génération d'UNDO + REDO De plus comme l'a dit OraFrance le HWM n'est pas redescendu. Ainsi, même si vous avez supprimé 90% de votre table les prochains Full Table Scan liront tous les blocks comme si la table n'avait jamais été purgée. Le truncate lui a un coût très faible mais comme l'a dit Laurent c'est une opération irreversible. Le truncate a 2 modes d'utilisation - Drop Storage => va restituer les blocks alloués au segment truncaté - Reuse Storage => Les lignes n'existent plus, le HWM est redescendu mais les blocks restent alloués au segment.
__________________
Mon blog Oracle: http://ahmedaangour.blogspot.com/ |
|
00
|
|
|
#19 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
et aussi dans 11.2.0.2
DROP ALL STORAGE qui restitue tous les extents (y compris le segment initial) > une opération irréversible et imprévisible! on ne sait pas vraiment l'effet que ça a sur les requêtes en cours |
|
00
|
Copyright © 2000-2012 - www.developpez.com