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 :

PB Accès conccurents


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut PB Accès conccurents
    Bonjour,

    Je viens m'eclairer a vos lumières Oracle...
    Ayant plusieurs serveurs travaillant sur une même table, j'aimerais qu'ils puissent faire une requete qui ne retourne pas les enregistrements déja en cours de traitement et lockés.
    Je n'y arrive pas, j'ai testé en modifiant les parametres SET ISOLATION, en faisant des selects for update .. le select m'inclu toujours les enregistrements locké et donc ca bloque jusqu'a ce que le précédent server ait fait son commit.

    Une petite aide serait grandement appréciée.
    Merci
    Yd

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Par défaut
    select for update nowait ne répond pas à ton besoin non plus ?
    Peux-tu préciser un peu ton besoin ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut PB Accès conccurents
    Citation Envoyé par xavi Voir le message
    select for update nowait ne répond pas à ton besoin non plus ?
    Peux-tu préciser un peu ton besoin ?
    En fait non, un nowait ne solutionne pas mon pb.
    J'explique :

    J'ai une table contenant des messages a traiter puis a supprimer.
    Le tout en transactionnel, si qq part le traitement foire, tout doit revenir comme avant.

    J'ai un pool de serveurs identiques qui doivent traiter ces messages par ordre de priorité. Donc avec requete qui scanne toute la table.

    Je n'arrive pas a trouver une solution pour qu'ils puissent travailler ensemble chacun sur un message différent en même temps :

    le premier qui chope un message bloque les autres jusqu'a son commit (donc ca sert a rien d'en avoir en parallele)

    Je comprend pas qu'il n'existe pas de select qui ne renvoi pas les enregistrements lockés ... déja eut le probleme sous informix, et là heureusement ya un dirty read et j'ai donc pu solutioner le probleme avec un flag sur l'enregistrement qui dit si il est en cours de traitement ou pas et donc en dirty read, un select avec ce flag ne renvoi pas le locké ...

    Mais pas de dirty read sous oracle ...

    si qq1 a une idée, parce quie moi je seche
    bonsoir


    Yd

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Par défaut
    Déjà fait ça dans une vie antérieure.

    De mémoire, la solution :
    Un curseur fait un select for update nowait (d'un bloc de lignes, je crois, mais c'est possible que ce soit ligne à ligne) le tout trié par le critère de priorité.

    On trappe l'erreur spécifique du nowait et on l'ignore : si elle apparait c'est qu'il faut aller voir plus loin, donc fetch des lignes suivantes jusqu'à récupérer quelque chose.

    Ensuite, on fait notre petit traitement, puis on flaggue les données traitées. En fin de traitement, les données traitées sont supprimées.

    C'était en pro*C, mais c'est faisable en PL. Autre chose : il me semble qu'il faut pas hésiter à fermer / réouvrir les curseurs fréquemment en cas de traitement long.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut PB Accès conccurents
    Bonjour Xavi,

    Merci de ta réponse. Je fait egalement du pro*C.
    La solution que tu décrit, je l'ai testé.
    A priori, en FOR UPDATE NOWAIT, c'est pas le FETCH qui retourne l'erreur mais le SELECT. Donc lorsqu'on la trappe, il faut ensuite se debrouiller avec les rownum pour choper le suivant ..
    Mais le souci, c'est que une fois que le premier serveur à pris son enregistrement, impossible d'accéder aux autres, cela me retourne une erreur -54(ressource busy)....

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Par défaut
    Poste ton code.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2008, 08h49
  2. [Windows]accès base de registre windows
    Par Greg01 dans le forum API standards et tierces
    Réponses: 27
    Dernier message: 05/06/2007, 16h14
  3. acces conccurent
    Par u_ceff dans le forum Oracle
    Réponses: 3
    Dernier message: 24/02/2006, 14h31
  4. Exécution indivisible (accès conccurent)
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 23/07/2002, 09h09
  5. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 15h39

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