|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : septembre 2011 Messages : 1 ![]() |
Bonjour,
Je dois gérer dans une application de gestion à certains endroit stratégique un système de gestion d'accès concurrent pessimiste : Quand un utilisateur "A" rendre en édition sur une commande je souhaite "bloquer" cette commande pour les autres utilisateurs. Si un autre utilisateur "B" essaye d'éditer cette commande je souhaite pouvoir détecter que la commande est déjà en cours de modification par un autre utilisateur et en l'informer l'utilisateur. La commande sera débloquée quand l'utilisateur "A" aura quitté l'édition du bon de commande. Un cas assez classique et pourtant j'ai du mal à trouvé de l'info et des exemples. J'ai identifié plusieurs solution : 1 - bloquer des lignes dans une transaction avec un select xxx with(WITH (UPDLOCK, HOLDLOCK,ROWLOCK) 2 - gérer un lock des lignes de façon logique (à la main en utilisant un flag) 3 - j'ai trouver également des infos sur sp_getapplock mais j'avoue de pas maîtriser ce truc. Avez-vous des conseils à me donner ? |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
La première solution est la plus fiable, mais aussi :
- La plus risquée (une personne qui modifie une donnée centrale à l'application et part en pause déjeuné sans valider, et elle bloque tout le monde) - La plus consommatrice en ressources (et provoque d'importants bottle neck) => A n'utiliser donc qu'aux endroits absolument nécessaires (contraintes d'intégrité) La seconde solution est à éviter comme la peste. On peut l'utiliser avec parcimonie, mais pour empêcher des actions bien précises d'être effectuées par plusieurs personnes en même temps. En effet, ajouter des tests de flag partout dans toutes les requêtes, c'est contre-performant, et source d'oublis qui peuvent devenir graves. Je ne connais pas cette troisème solution. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com