|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Inscription : mars 2003 Messages : 66 ![]() |
Bonjour,
dans la boite ou je suis, pour empecher que les utilisateurs modifient la même ligne en même temps, nous faisant un Code :
SELECT * FROM TABLE1 WHERE TBL_ID = 12345 FOR UPDATE NOWAIT Quand l'utilisateur reçoit l'exception, j'aimerai bien afficher un message d'erreur lui disant que tel ou tel autre personne est entrain de modifier pour cela j'ai fait Code :
A.OBJECT_ID represente TABLE1 tandis que ROW_WAIT_OBJ# une autre TABLE X Ceci reprensente un probleme car je ne peux pas recupere le rowid de la ligne lockée dans TABLE1 car dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW#) me donne le ROWID dans TABLE X. Est-ce que vous avez une autre solution à me proposer ?? Merci beaucoup |
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Citation:
Pourquoi faire un jointure avec SYS.V_$LOCKED_OBJECT et SYS.ALL_OBJECTS ? Je ferais plutôt une jointure seulement avec ALL_OBJECTS. J'ai un doute sur l'algorithme utilisé ROW_WAIT_ROW# est seulement valide si une transaction attend sur une autre transaction. Avec NOWAIT, il n'y a pas d'attente ![]() Citation:
|
||
|
|
00
|
|
|
#3 | ||
|
Membre confirmé
![]() Inscription : octobre 2006 Messages : 221 ![]() |
Je crois que pour garantir accès unique au enregistrement (éventuel affichage d'utilisateur modifiant à l'heure actuelle), creation de propre "LOCKTAB" table est la meilleur solution.
Code :
Beaucoup de travail, beaucoup de problèmes, mais on peut éviter V_$*LOCK*. Votre avis? DAB |
||
|
|
00
|
|
|
#4 | ||||||||
|
Membre à l'essai
![]() Inscription : mars 2003 Messages : 66 ![]() |
Bonjour, tous d'abord pour repondre a Pifor
La version d'oracle de 10G release 2 Ensuite pour moi c'est clair que avec NOWAIT, il n'y a pas d'attente, et que je ne puisse pas utilisé ROW_WAIT_ROW# Mais il doit bien y avoir un moyen de trouver la ligne lockée, sans passer pas une table intermediaire comme le propose DAB.cz Je vais te montrer ce que je fais A partir de mon application (.NET 2.0) je fait Code :
SELECT * FROM vorschlag WHERE vor_id = 12345 FOR UPDATE nowait Code :
Code :
si je fait Code :
Code :
voila si ça peut aider quelqu'un a comprendre le probleme |
||||||||
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Citation:
|
|
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Inscription : mars 2003 Messages : 66 ![]() |
Ok, donc soit je passe par une table intermediare, soit je mentionne dans le message d'erreur tout les utilisateurs qui lockent quelque chose (il n'y en a jamais plus que 5, en général 1-2).
Merci quand même.
|
|
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : mars 2003 Messages : 66 ![]() |
C'est quand même dommage qu'il n'y pas de table V$ qui donne ce genre de renseignements.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com