|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2002 Messages : 26 ![]() |
Bonjour,
Je souhaiterais empêcher tout accès concurrent sur l'exécution d'une procédure stockée (comme le ferait un Mutex) : Si un autre appel intervient pendant son exécution je voudrait que l'appel ne lance pas l'exécution tant que le précédent n'est pas exécuté (ou ne lance rien du tout). Est-ce quelque chose d'intégré dans Sql Server ? merci Florent |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
Il vous suffit pour cela de spécifier le niveau d'isolation de transaction SERIALIZABLE dès le début de votre procédure stockée, et de transactionner explicitement l'ensemble de vos requêtes : Code :
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2002 Messages : 26 ![]() |
Le but de la manœuvre est de corriger un dysfonctionnement ... Il semble qu'elle est appelée une deuxième fois avant la fin de l'exécution précédente, et comme elle utilise des tables intermédiaires de calcul ça ne se passe pas bien !
Merci pour la réponse, j'essaie tout de suite ! |
|
|
00
|
|
|
#4 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
Est-elle appelée par un job ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2002 Messages : 26 ![]() |
Elle appelé par un écran utilisateur (bouton), comme il y a plusieurs écrans il peut y avoir des appels concurrents
|
|
|
00
|
|
|
#6 | |
|
Membre Expert
![]() |
Citation:
Mais peut'être n'est ce pas le but recherché?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#7 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Je me pose la question de savoir si le niveau de transaction SERIALIZABLE est vraiment adapté pour cette problématique. En effet même si ce mode permettra de bloquer l'exécution de 2 procédures simultanées elle n'empêchera pas pour autant son exécution. De plus le verrouillage fort qu'implique ce niveau d'isolation peut être pénalisant pour les autres requêtes qui seraient suceptibles d'utiliser les objets impliqués.
Il me semble que Hmira avait proposé une solution intéressante sur le sujet qui consistait à créer une table de réservation des procédures qui permettaient de fonctionner à l'instar des mutex. ++ |
|
00
|
|
|
#8 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#9 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Mikedavem, Iberserk,
Les questions que vous soulevez ont tout leur sens, cela dit : Citation:
Si l'on souhaite effectuer un groupe de transactions comme une seule transaction, il suffit de le faire explicitement. En cela je suis d'accord avec vous : le niveau d'isolation SERIALIZABLE ne répond pas proprement à la problématique. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com