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 :

[9i] Probleme clé


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut [9i] Probleme clé
    Bonjour,

    Je viens à vous suite à un problème que je n'arrive pas à résoudre.
    Pour shematiser de facon simple(j'ai effectué un test avec ce cas la)

    Je définie une table t1 toute simple contenant un Identifiant c1 etant un nombre et une cle primaire.

    Volontairement, cette clé n'est pas en auto-increment.
    je souhaite donc lancer deux insertions simultanées.

    Auto commit à off.
    En version simplifié la requete donne :
    Requete req = insert into t1 select nvl(max(C1),0)+1 from t1;

    Je lance donc cette requete deux fois, la premiere s'execute, la deuxieme est en attente de la fin de la premiere transaction.

    Lors du commit de la premiere transaction il en résulte une erreur de cle primaire sur la deuxieme transaction.

    J'ai fait différent test en modifiant "isolation level" jusque serializable ou en faisant un lock de la table en mode exclusif, cela ne marche tjs pas.

    Je n'arrive donc pas a resoudre ce probleme.

    Résultat attendu si il y a un element x dans la table, alors en executant les deux requetes simultanément je me retrouve avec x+1 et x+2

    Merci d'avance.

  2. #2
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut contradiction
    en executant les deux requetes simultanément je me retrouve avec x+1 et x+2
    Par définition, si les 2 traitements sont exactement simultanés, il y aura forcément x+1 des 2 cotés, car à contexte égal, résultat égal...

    Tu as justement besoin d'empecher cette simultanéité.

    Dans la pratique, on utilise les séquences. Oracle garanti une unicité absolue indépendament de tout niveau d'isolation.

    Si tu as absoluement besoin de retrouver le max+1 de ta table, alors tu peux par exemple poser un lock exclusif sur la table juste avant la requête et faire un commit juste aprés. Tu auras ainsi la garantie que ta 2ieme transaction attendra au niveau de son lock, jusqu'à ce que la 1iere effectue son commit.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut
    merci bcp pour ta réponse, cela fonctionne

    Dans les tests que j'avais effectué, le lock table en mode exlusif ne fonctionnait pas ceux qui m'avait laissé perplexe.

    En fait j effectué un set isolation lvl en serializable(ceux que ja vais testé avant) et derreire mon lock puis insert,(ah copier coller ^^), j'ai omnis de tester le lock tout seul (ce que je voulasi faire au départ)

    autant pour moi

    Merci

    PS: oui je dois faire un max+1 ceux qui ne m'enchantait pas au départ

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

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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