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 :

Foreign Key : lock sur la table référencée ?


Sujet :

SQL Oracle

  1. #21
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Puis-je comprendre que vous est d’accord finalement avec le test que j’ai proposé, ou j’ai encore une fois raté quelque chose ?
    Oui je suis d'accord: j'ai seulement essayé de vérifier en détail ce que disait la documentation.

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 42
    Par défaut
    Au final, d'après la doc Oracle, la table T_CHILD est lockée si il n'y a pas d'index sur la clé étrangère au niveau de la table T_PARENT.

    Mais concrétement, on n'arrive pas à "le prouver par l'exemple".

    Moi, ma question est simple :
    Si je fais mon update sur ma table T_PARENT, ma table T_CHILD doit être lockée. Donc dans une deuxième session, si j'essaie de faire un update sur ma table T_CHILD, elle est lockée.
    Comment est-ce que je fais pour le vérifier ?
    Parce que le cas du LOCK TABLE T_CHILD n'est pas convaincant.
    Normalement, dans les préceptes d'Oracle, un verrou posé est relâché lors d'un commit ou d'un rollback ?!
    Donc, si dans sa mécanique interne Oracle lock la table T_CHILD, tant que je n'ai pas commité, dans une autre session je ne peux pas agir sur la table T_CHILD...

  3. #23
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut Contraintes d'intégrité, index et verrouillage
    Ci-dessous un résumé sur cette question :

    Verrouillage et contraintes d'intégrité référentielle
    • Verouiilage de la table mère


    Dans tous les cas de figure, une mise à jour (INSERT ou UPDATE de la clé étrangère) de la table fille provoque la pose d'un verrou ROW SHARE (RS ou SS) sur la table mère.
    • Verouiilage de la table fille


    Une suppression d'une ligne ou une mise à jour de la clé primaire de la table mère provoque un verrouillage de la table fille
    • Sans index sur la clé étrangère
    Si aucune option n'a été spécifiée lors de la définition de la contrainte alors le verrou utilisé est SHARE (S).

    Si l'une des options ON DELETE CASCADE ou ON DELETE SET NULL a été désignée alors le verrou utilisé est SHARE ROW EXCLUSIVE (SRX ou SSX).

    • Un index est créé sur la clé étrangère
    Un verrou ROW SHARE (RS ou SS) est posé sur la table fille lors d'une opération de mise à jour ou de suppression de lignes de la table mère. C'est le verrou le plus faible sur les tables.

  4. #24
    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 strikerm59 Voir le message
    ...
    Parce que le cas du LOCK TABLE T_CHILD n'est pas convaincant.
    Normalement, dans les préceptes d'Oracle, un verrou posé est relâché lors d'un commit ou d'un rollback ?!
    Donc, si dans sa mécanique interne Oracle lock la table T_CHILD, tant que je n'ai pas commité, dans une autre session je ne peux pas agir sur la table T_CHILD
    ...
    C’est ce que tu penses mais pas ce qui est écrit dans la documentation
    …The SSX lock is released immediately after it is obtained…
    Cella veut dire que dans ce cas le verrou est relâché immédiatement après avoir été posé et non pas au moment du commit/rollback. C’est pour cella qu'on a utilisé le blocage : dans cette situation Oracle essai de poser le verrou mais parce que il n’abouti pas il reste bloqué. Et cella donne l’opportunité de le mettre en évidence. Relis avec attention tout ce qui a été écrit.

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 42
    Par défaut
    Ok, c'est clair comme cela.

    Merci pour votre aide.

Discussions similaires

  1. lock sur ma table
    Par kaking dans le forum Administration
    Réponses: 6
    Dernier message: 02/07/2008, 14h02
  2. Désactivation de toutes les Foreign Key pointant sur une table.
    Par sybaris dans le forum Développement
    Réponses: 3
    Dernier message: 29/06/2008, 20h57
  3. foreign key multiple (vers 2 tables ou plus)
    Par Bombastus dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2006, 16h26
  4. comment gérer plusieurs locks sur une table?
    Par charluber dans le forum Oracle
    Réponses: 4
    Dernier message: 18/04/2006, 21h28
  5. Faire un Lock sur une table pendant l'exec d'un DTS
    Par Pete dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/03/2005, 14h17

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