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

PL/SQL Oracle Discussion :

différence de pose de verrou LOCK table


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Par défaut différence de pose de verrou LOCK table
    Bonjour,

    mon problème est de savoir si dans une procédure stockée de poser un LOCK TABLE maTable IN SHARE ROW EXCLUSIVE MODE; bloque le traitement de la procédure et empeche un autre locj de ce type ?

    Je m'explique la procédure peut être appelé en simultanée et plusieurs instructions sont faites sur maTable (select pour vérifier si une donnée est présente ensuite un insert ou un update.. ) somme tout banal.

    J'ai mis LOCK TABLE maTable IN EXCLUSIVE MODE; mais c'est à priori un peu trop mais je ne suis pas sur qu'un LOCK TABLE maTable IN SHARE ROW EXCLUSIVE MODE empeche de reposer LOCK TABLE maTable IN SHARE ROW EXCLUSIVE MODE par un autre appel en simultanée ???

    D'apres la doc Oracle cela semble bon mais ce n'est pas si clair que celam le lock SRX semble est correcte et les insert ou update de la procédure ne doivent pas laché se lock!

    Merci d'avance

  2. #2
    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
    T'as fait un petit test sur le lock en shared row exclusive mode ?

  3. #3
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je ne suis pas sur qu'un LOCK TABLE maTable IN SHARE ROW EXCLUSIVE MODE empeche de reposer LOCK TABLE maTable IN SHARE ROW EXCLUSIVE MODE par un autre appel en simultanée
    Oui, d'aprés la doc (http://download.oracle.com/docs/cd/B...t.htm#BABCJIAJ): SRX prohibits SRX

    Maintenant par rapport à ton besoin:

    1-
    la procédure peut être appelé en simultanée
    Si tu utilise un lock exclusif (comme SHARE ROW EXCLUSIVE MODE ou EXCLUSIVE MODE), les appels simultanés seront en fait sérialisés sur ce verrou.

    2-
    select pour vérifier si une donnée est présente ensuite un insert ou un update
    Un simple select for update permet celà: les données que tu as lues ne seront pas modifiées par une session concurrente. Par contre, celà n'empêche pas des insertions concurrentes. A toi de voir si tu veux empêcher celà.
    Un exemple: tu as 20 places dans un avion et tu as une table qui enregistre une ligne par réservation. Tu fais un select qui te dit qu'il reste une place libre, alors tu la reserve. Mais si entre temps une autre session a fait la même chose tu a fait du surbooking.

    Pour prévenir celà,
    - soit tu empêches tout DML sur la table (LOCK TABLE ... IN SHARE MODE)
    Celà empêche toute réservation concurrente, mais pas la consultation du nombre de place libre.
    - soit tu peux vérouiller un enregistrement père, genre select for update sur l'avion. Et tu garantis que toute nouvelle réservation fait celà.
    Celà ne bloque que les réservations sur le même avion

    Cordialement,
    Franck.

  4. #4
    Membre averti
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Par défaut
    Ok merci pour le lien et les réponses.

    Cela résout mon pb.
    sinon pour tester je ne peux pas faire des tests concluant je n'ai pas l'environnement et les outils pour le faire.


    Citation Envoyé par pachot Voir le message
    Bonjour,

    Oui, d'aprés la doc (http://download.oracle.com/docs/cd/B...t.htm#BABCJIAJ): SRX prohibits SRX

    Maintenant par rapport à ton besoin:

    1- Si tu utilise un lock exclusif (comme SHARE ROW EXCLUSIVE MODE ou EXCLUSIVE MODE), les appels simultanés seront en fait sérialisés sur ce verrou.

    2- Un simple select for update permet celà: les données que tu as lues ne seront pas modifiées par une session concurrente. Par contre, celà n'empêche pas des insertions concurrentes. A toi de voir si tu veux empêcher celà.
    Un exemple: tu as 20 places dans un avion et tu as une table qui enregistre une ligne par réservation. Tu fais un select qui te dit qu'il reste une place libre, alors tu la reserve. Mais si entre temps une autre session a fait la même chose tu a fait du surbooking.

    Pour prévenir celà,
    - soit tu empêches tout DML sur la table (LOCK TABLE ... IN SHARE MODE)
    Celà empêche toute réservation concurrente, mais pas la consultation du nombre de place libre.
    - soit tu peux vérouiller un enregistrement père, genre select for update sur l'avion. Et tu garantis que toute nouvelle réservation fait celà.
    Celà ne bloque que les réservations sur le même avion

    Cordialement,
    Franck.

  5. #5
    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 canardpc Voir le message
    ...
    sinon pour tester je ne peux pas faire des tests concluant je n'ai pas l'environnement et les outils pour le faire.
    Un simple sqlplus ça suffit. Et il est toujours disponible sur Apex en ligne.
    Il y a aussi un package DBMS_LOCK qui peut être utilisé pour les verrous utilisateur.

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

Discussions similaires

  1. Lock table
    Par amelie6 dans le forum Oracle
    Réponses: 8
    Dernier message: 03/09/2011, 16h29
  2. syntaxe de lock tables
    Par pas30 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 31/12/2006, 00h54
  3. Lock Table ?
    Par 000 dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/05/2006, 13h51
  4. différence entre 2 colonnes de 2 tables
    Par rdams dans le forum Requêtes
    Réponses: 5
    Dernier message: 09/11/2005, 13h35
  5. LOCK TABLES et TRUNCATE TABLE
    Par killy-kun dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/08/2005, 15h52

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