IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Différence entre TRUNCATE et DELETE ?


Sujet :

SQL Oracle

  1. #1
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    Points : 638
    Points
    638
    Par défaut Différence entre TRUNCATE et DELETE ?
    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

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Attention, Le fait que le commit soit implicite fait qu'un truncate est irrémédiable !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Points : 342
    Points
    342
    Par défaut
    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.

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    et DELETE ne touche pas à la HWM. Donc un DELETE de toutes les tables d'un tablespace ne suffit pas à réduire la taille des datafiles

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Je peux en rajouter une ?
    TRUNCATE ne déclenche pas les triggers !

    (ouais, je suis content de moi, et alors ? )

  7. #7
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Je peux en rajouter une ?
    TRUNCATE ne déclenche pas les triggers !

    (ouais, je suis content de moi, et alors ? )
    La réponse de jmquiche le sous entendait déjà...

  8. #8
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    La réponse de jmquiche le sous entendait déjà...
    J'aimerai bien savoir quel point de la reponse de jmquiche le sous entend. Merci

  9. #9
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Citation Envoyé par rvfranck Voir le message
    J'aimerai bien savoir quel point de la reponse de jmquiche le sous entend. Merci
    Citation Envoyé par jmquiche
    Delete, c'est du DML, ...
    Truncate, c'est du DDL,...

  10. #10
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    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?

  11. #11
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Non un DDL peut faire exécuter un trigger (exemple un ajout de colonne avec un defaut).

  12. #12
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    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
    Citation Envoyé par pacmann Voir le message
    Je peux en rajouter une ?
    TRUNCATE ne déclenche pas les triggers !
    (ouais, je suis content de moi, et alors ? )
    C'est différent de dire que "TRUNCATE" ne déclenche pas un trigger "DELETE".

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    J'en ajoute une autre (également déjà sous-entendu) :

    Les colonnes de type "auto-incrément" (IDENTITY par exemple) sont réinitialisées.

  14. #14
    Expert éminent
    Avatar de kdmbella
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 799
    Points : 7 038
    Points
    7 038
    Par défaut
    Citation Envoyé par rvfranck Voir le message
    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".
    Oui la difference c'est que TRUNCATE ne déclenche aucun type de Trigger y compris les trigger de Type DELETE

  15. #15
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par Vyns1520 Voir le message
    Les colonnes de type "auto-incrément" (IDENTITY par exemple) sont réinitialisées.
    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 !

  16. #16
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par kdmbella Voir le message
    Oui la difference c'est que TRUNCATE ne déclenche aucun type de Trigger y compris les trigger de Type DELETE
    Perdu ! Un déclencheur de type DDL peut parfaitement se déclencher suite à un TRUNCATE.

  17. #17
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    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

  18. #18
    Membre actif Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Points : 271
    Points
    271
    Par défaut
    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.

  19. #19
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre delete et delete []
    Par deubelte dans le forum C++
    Réponses: 39
    Dernier message: 30/05/2011, 11h33
  2. différence entre delete et delete[]
    Par deubelte dans le forum C++
    Réponses: 7
    Dernier message: 25/02/2009, 04h30
  3. [BDE][TTABLE] différence entre EMPTY et DELETE
    Par cal dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/02/2008, 09h04
  4. Différences entre delete table et delete from table
    Par pegase06 dans le forum Administration
    Réponses: 3
    Dernier message: 16/02/2007, 16h25
  5. Réponses: 3
    Dernier message: 07/05/2002, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo