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 :

defferable constraints avantages/inconvénients


Sujet :

SQL Oracle

  1. #1
    Membre confirmé Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Par défaut defferable constraints avantages/inconvénients
    Bonjour ,

    Je souhaiterai connaitre les inconvénients (s'il y en a) du "defferable constraints".

    En effet cet option n'est pas défini par défaut lorsque l'on défini un clé primaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL> CREATE TABLE lsc_t(x number constraint lsc_t_pk PRIMARY KEY deferrable initially deferred);
    Il y a-t-il une raison pour que cette option, somme toutes très partique, ne soit pas définie par défaut sur toutes les clés primaires? Il y a-t-il des inconvénients a son utilisation?

    Merci d'avance,

  2. #2
    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
    Par défaut
    Citation Envoyé par bankette Voir le message
    Bonjour ,

    Je souhaiterai connaitre les inconvénients (s'il y en a) du "defferable constraints".

    En effet cet option n'est pas défini par défaut lorsque l'on défini un clé primaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL> CREATE TABLE lsc_t(x number constraint lsc_t_pk PRIMARY KEY deferrable initially deferred);
    Il y a-t-il une raison pour que cette option, somme toutes très partique, ne soit pas définie par défaut sur toutes les clés primaires? Il y a-t-il des inconvénients a son utilisation?

    Merci d'avance,

    Bonjour

    Comme vous le savez, par défaut une contrainte est vérifiée à la fin de l'opération modificative (UPDATE par exemple). Si vous reportez cette vérification à la fin de la transaction complète, cela veut dire que vous autorisez la violation de cette contrainte, et donc les incohérences qui en découlent, durant toute la durée de la transaction.
    Certes, grâce à l'isolation, lesdites incohérences ne seront pas visibles des autres sessions, mais les autoriser c'est armer le pistolet pour se tirer une balle dans le pied...

  3. #3
    Membre confirmé Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Par défaut
    Merci de ta réponse, je suis parfaitement conscient du fonctionnement et je ne pense l'utiliser que pour des transaction simple (un simple delete) mais sur des table possedant énormement de clé étrangère (un delete de 250 lignes prend environ 15 minutes !).

    Ce que je souhaiterai savoir c'est il y a t il des effets de bord a ce paramétrage, est ce que cela peut avoir des influence sur les performances général de la BDD, il y a t il des opération qui ne sont plus permises? En gros il y a t il un coté obscure au defferable constraint ?

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par bankette Voir le message
    ...un delete de 250 lignes prend environ 15 minutes ...
    Si c'est vrai probablement qu'il faut vérifier l'opportunité d'avoir des indexes sur les clés étrangères. Faite une trace SQL étendue pour savoir plus.
    De toute façon defferable ou pas la contrainte sera vérifié.

  5. #5
    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
    Par défaut
    à mon avis, si tu as DEFERRABLE INITIALLY IMMEDIATE, alors le fonctionnement est le même que NOT DEFERRABLE

    La différence est que avec NOT DEFERRABLE, l'utilisateur qui n'a pas ALTER ANY TABLE ne peut pas modifier se fonctionnement. Donc en quelque sorte l'inconvénient de mettre toujours DEFERRABLE INITIALLY IMMEDIATE se limite à une question applicative. Il se pourrait par exemple qu'un TRIGGER soit lancé alors que la ligne sera rejettée lors du COMMIT

  6. #6
    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
    Par défaut
    bon, par contre d'avoir DEFERRABLE INITIALLY DEFERRED, ça change fondamentalement le fonctionnement de l'application

  7. #7
    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
    Par défaut
    tu auras aussi plus de rollback en cas de violation lors du commit d'une grosse transaction

  8. #8
    Membre confirmé Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    Il se pourrait par exemple qu'un TRIGGER soit lancé alors que la ligne sera rejettée lors du COMMIT
    Ceci peut etre très génant ! Est ce que cela veut dire que un trigger pourra etre déclencher par un delete dans une table1, modifier d'autre table ou autre chose, mais seules les modifications de la table1 seront rollbacké, c'est a dire que toutes les modifications faites pas le trigger seront validés?

  9. #9
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Non ! Sauf bien sûr mauvaise utilisation du pragma autonomous transaction

    @Laurent
    Dire "si tu as DEFERRABLE INITIALLY IMMEDIATE, alors le fonctionnement est le même que NOT DEFERRABLE" c'est un peu confuse, ne pense tu ?

  10. #10
    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
    Par défaut
    @mnitu OK, je reformule

    avec DEFERRABLE INITIALLY IMMEDIATE et avec NOT DEFERRABLE, la validation est faite pour chaque statement.

    La différence est que, au besoin, on peut déferrer la contrainte, par exemple pour un batch. Mais dans le cas où la contrainte est IMMEDIATE, le "déferrable" ne joue aucun effet.

    Donc il n'y a pas vraiment d'inconvénient à avoir DEFERRABLE INITIALLY IMMEDIATE plutôt que NOT DEFERRABLE ... sauf bien sûr si l'on veut empêcher les utilisateurs de faire SET CONSTRAINTS ALL DEFERRED

    C'est plus clair

  11. #11
    Membre confirmé Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Par défaut
    Oui c'est très clair !

    cependant si cela ne présente aucun inconvénient pourquoi le defferrable constraint n'est pas défini par défaut pour toutes les clés? Ma question peut paraitre un peu bete, mais pourquoi une option qui a priori ne presente aucun inconvénient n'est pas définie systématiquement et doit etre ajouter a chaque création de clé?

    Merci,

  12. #12
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Je pense que c’est historique : quand Oracle a ajouté les contraints dans la version 7 elles n’étaient pas deferrable.

  13. #13
    Membre confirmé Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de Projet Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 135
    Par défaut
    OK, merci beaucoup pour vos réponses !!

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

Discussions similaires

  1. Avantages / inconvénients de BSD face à linux
    Par Community Management dans le forum Distributions
    Réponses: 129
    Dernier message: 17/01/2011, 18h51
  2. FireBird Avantages / Inconvénients ?
    Par WuKoDLaK dans le forum Débuter
    Réponses: 14
    Dernier message: 15/05/2006, 16h48
  3. Réponses: 5
    Dernier message: 27/07/2004, 15h57
  4. Oracle -> Postgres (avantages/ inconvénients)
    Par milka dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 12/03/2004, 11h58

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