Bonjour,
je cherche une méthode fiable, propre et de préférence simple à mettre en oeuvre, pour empêcher l'execution multiple et simultanée d'une procédure stockée
Des idées ?
Merci d'avance !
Bonjour,
je cherche une méthode fiable, propre et de préférence simple à mettre en oeuvre, pour empêcher l'execution multiple et simultanée d'une procédure stockée
Des idées ?
Merci d'avance !
Bonjour,
Quel est le but de la manoeuvre ?
++
J'ai un service qui tourne à intervale régulier, et un bouton dans un interface utilisateur, qui lancent la même action. Je veux donc éviter que tout ceci interfère (traitement utilisateur en même temps que le service, traitement du service alors que l'utilisateur a déjà lancé, traitement du service alors que le traitement précédant n'est pas terminé)
1 – Tu crée une table par exemple Reservations (sous entendu, réservations pour l’exécution des procédures)
Exemple :
2 – Tu crée, une entrée dans la table Réservation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE TABLE Reservations ( ProcName sysname not null CONSTRAINT PK_Reservations PRIMARY key CLUSTERED, Reserved bit -- Ligne réservée 0 (False) ie procédure non réservé ou 1 (True) ie procédure Réservée. ); GO
L’étape 2 ci-dessus est une initialisation effectuée une seule fois, lors de l’installation par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 INSERT INTO Reservations (ProcName , Reserved) Values ('MaProcedure', 0); -- à l'initialisation la procédure n'est pas réservée (Reserved=0) GO
3 – Pour le reste, il faut utiliser le design patern du Mutex ou du Semaphore à un seul jeton. La mise en ouvre des Sections Critiques, (ie, dans ton cas, la prise de jeton pour exécuter la procédure), peut être réalisée par le truchement des niveaux d’isolation des transactions. Le niveau d’isolation REPEATABLE READ appliquée lors de la lecture ou l’écriture de l’enregistrement correspondant à ligne ‘MaProcedure’ dans la table Resevations, est le mieux approprié et permet de manière sûre et fiable l’attribution du jeton dans un contexte multi-sessions, multi-utilisateurs.
Le Sémaphore se déroule en 3 opération :
Init Initialisation du sémaphore. Cette opération est effectuée une seule fois.
P Mise en attente jusqu'à ce qu'une ressource soit disponible
V est l'opération inverse; elle rend simplement une ressource disponible à nouveau après que le processus a terminé de l'utiliser.
Remarque : Les termes P et V proviennent du néerlandais Proberen et Verhogen ce qui signifie tester et incrémenter (en français "Puis-je?" et "Vas-y!").
Partager