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

Oracle Discussion :

problème de section critique


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 87
    Points : 79
    Points
    79
    Par défaut problème de section critique
    bonjour,
    je dois développer une procédure stockée en PL/SQL qui doit regarder dans les données d'une vue matérialisée, et en deux selects concécutifs, trouver un enregistrement qui statisfait un certain critère et le marquer comme trouvé.

    le shéma est en gros

    select a into b from anyview where anycol4 != anyval;
    select c into D from anyview where anycol2 = b;
    update anytable set anycol2=1 where anycol4 = D;

    avec anytable est la table à partir de la quelle la vue anyview a été construite.

    mon problème, est que quand j'ai deux utilisateurs concecutifs, il arrive que je reçois en sortie la même valeur D, alors que ce n'est pas possible.

    je ne comprend pas très bien les différents mode de lock table ou lock view. j'utilise le mode exclusive, mais il me génère rappidement un timeout.
    comment puis-je éviter le problème des section critiques? comment puis-je interdire l'accès pendant les deux select et l'update aux autre utilisateurs tout en évitant de tomber dans un deadlock?

    merci
    AEMAG

  2. #2
    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
    Points : 3 597
    Points
    3 597
    Par défaut
    En général on utilise le clause FOR UPDATE du SELECT qui pose un verrou exclusif sur toutes les lignes concernées de la requête SELECT. Ces verrous ne sont libérés qu'à la fin de la transaction qui les a obtenus par COMMIT ou ROLLBACK. Pour éviter les deadlocks, il faut au moins essayer de prendre les verrous toujours dans le même ordre.

    Dans certains cas particuliers, il peut être intéressant d'utiliser le package DBMS_LOCK si le SELECT ... FOR UPDATE n'est pas adapté.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 87
    Points : 79
    Points
    79
    Par défaut
    bonjour,
    merci pour ton aide, j'ai fini par utiliser lock table avec le mode share row exclusive , et ça a l'air de marcher
    AEMAG

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

Discussions similaires

  1. Problème avec les Threads et Section critique
    Par Devildz dans le forum Débuter
    Réponses: 1
    Dernier message: 25/11/2014, 21h51
  2. Problème d'include avec une section critique.
    Par radicalrider dans le forum Visual C++
    Réponses: 21
    Dernier message: 12/07/2006, 15h38
  3. section critique "static" ou pas?
    Par giova_fr dans le forum Windows
    Réponses: 2
    Dernier message: 01/01/2006, 13h15
  4. [Delphi 6] Problème de section critique
    Par Desraux dans le forum Langage
    Réponses: 8
    Dernier message: 08/12/2005, 14h13
  5. [Kylix] Section critique
    Par rahimk dans le forum EDI
    Réponses: 5
    Dernier message: 23/11/2005, 12h18

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