Bonjour,
Me voilà devant un problème embêtant.
Un code Pro*C gère une séquence de manière peu catholique.
A un moment, il y a une mise à jour de la current value d'une séquence Oracle à faire. Le moyen utilisé est celui la :
1- Calcul du delta à rajouter à la séquence
2- Incrémentation du step de la séquence
3- sélection de la nextval de la séquence
4- ré initialisation du step à 1
J'ai vu que ce genre de manip était conseillé sur certain forum pour mettre à jour la valeur d'une séquence (plus rapide que n fois un nextval).
Certes, le problème étant que ce Pro*C est lancé plusieurs fois en même temps. A la fin, on se retrouve avec d'énorme saut de séquence, ce qui est à peine étonnant puisqu'il suffit qu'un des thread accède à la nextval pendant que la valeur du step est >1 pour avoir des sauts.
Une solution à laquelle on peu penser est de locker la séquence le temps de l'incrémentation, mais j'ai peur que ce ne soit pas possible sous Oracle.
La question : comment mettre à jour une séquence par un thread de manière sûre, c'est à dire sans s'exposer à des problème de concurrence, ni de saut de séquence ?
Edit Delestage : bien que la question reste ouverte, mon problème n'était pas provoqué par la séquence, out donc ^^
Partager