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 :

accés concurrent à une table


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut accés concurrent à une table
    Bonjour,

    je dois extraire un à un des enregistrements d'un table Oracle.
    Pour cela, j'ai mis en place un curseur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    EXEC SQL DECLARE C_T02k_02G_MARKUP CURSOR FOR
     
    SELECT 
     
    NOV_FLD_ID_BILL_ACCOUNT
     
    ,NOV_FLD_DR_CODE 
     
    ,NOV_FLD_MOV_CODE 
     
    ,NOV_FLD_FAILED_DATE
     
    ,NOV_FLD_FLAG
     
    FROM T02k_02G_MARKUP
     
    FOR UPDATE;
    Seulement, un autre programme alimente la table au fil de l'eau au même moment.

    La question est :
    Si j'utilise l'option FOR UPDATE, est ce que je bloque toute la table le temps de mon traitement, ou seulement la ligne sur laquelle je travaille?

    si je bloque toute la table, y aurait il un moyen de ne bloquer qu'une ligne?

    Merci d'avance pour toutes vos réponses,

    Shout

  2. #2
    thg
    thg est déconnecté
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 46
    Points : 55
    Points
    55
    Par défaut
    Le select for update pose un verrou sur toute les lignes concernees. Si tu as une clause qui "selectionne" juste une ligne , alors seule cette ligne sera "lockée" ...

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,
    Le verrou demandé par un select est de type Shared et donc même s'il y a une modification qui n' pas été encore validé celui ci peut lire l'image before et reconstituer une vue consistence des données via le UNDO .


    Il n'en ai pas de même lorsque c'est un update.

    Jaouad

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    merci pour ces réponses, mais en fait, je me demandais juste si je pouvais faire des insertinos dans ma table avec un triatement, pendant qu'un autre traitement faisait tourner le curseur.

    y a til un risque de conflit?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Points : 35
    Points
    35
    Par défaut
    Si la transaction contenant l'ouverture de ton curseur ne fait que de la consultation sur la table T02k_02G_MARKUP, il n'y a aucun risque de conflit ni de lock avec l'autre traitement d'insertion, il est donc inutile de préciser la clause "for update" sur ton curseur.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut merci
    ok, seulement, mon traitement doit aussi supprimer les enregistrements si il reçoit un accusé de réception "ok"... donc je fais un for update non?
    et cela pose t'il un soucis pour l'autre programme qui ne fait que des insertions?

    en tout cas, je vous remercie pour tout.

Discussions similaires

  1. [Oracle] Accès concurrent à une base de données
    Par schniouf dans le forum JDBC
    Réponses: 8
    Dernier message: 29/09/2006, 16h10
  2. [Conception] bloquer l'acces a une table
    Par darkbob dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/07/2006, 15h40
  3. Réponses: 9
    Dernier message: 15/02/2006, 20h54
  4. [DBA] Acces a une table via un DB*Link
    Par gaultier dans le forum Oracle
    Réponses: 1
    Dernier message: 26/01/2006, 14h56
  5. VBA acces a une table
    Par laurent1 dans le forum Access
    Réponses: 2
    Dernier message: 13/12/2005, 22h10

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