Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2011, 11h33   #1
Invité de passage
 
Inscription : septembre 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 1
Points : 0
Points : 0
Par défaut Mise en place accès concurrent pessimiste

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 ?
percapita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 14h41   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h55.


 
 
 
 
Partenaires

Hébergement Web