OVH Cloud OVH Cloud

Empecher d'exeuter une SP plusieurs fois en meme temps

4 réponses
Avatar
Mark
Bonjour,

Ext ce que il existe une methode pour empecher une procedure stockée pour
qu'elle soit excutée
par plusieurs threads (ou instances d'application) en meme temps ?.
On faite je veux que ma SP ne peut s'executer deux fois ou plus en meme
temps

Merci.

4 réponses

Avatar
Bouarroudj Mohamed
Vous pouvez utiliser sp_getapplock et sp_releaseapplock, voir BOL pour plus
d'information

L'exemple ci-dessous essaie (durant une seconde) d'avoir le token (ou la
ressource) : 'VotreTokenName', s'il ne reussi pas il affiche un message et
quitte la SP avec un code de retour -1

exec @Result = master.dbo.sp_getapplock
@Resource = 'VotreTokenName'
@LockMode = 'Exclusive',
@LockOwner = 'Session',
@LockTimeout = 1000 -- time out value in milliseconds

if @Result < 0
begin
print 'SP en cours d''execution par d''autres procresses...'
return -1
end

... votre code

Lorsque vous avez fini avec votre token vous pouvez le liberer avec

exec master.dbo.sp_releaseapplock
@Resource = 'VotreTokenName',
@LockOwner = 'Session'



"Mark" wrote in message
news:O3Fr$
Bonjour,

Ext ce que il existe une methode pour empecher une procedure stockée pour
qu'elle soit excutée
par plusieurs threads (ou instances d'application) en meme temps ?.
On faite je veux que ma SP ne peut s'executer deux fois ou plus en meme
temps

Merci.




Avatar
Fred BROUARD
Le plus simple est de piloter une transaction au niveau d'isolation
SERIALIZABLE. Mais gare aux blocages possibles. Soyez judicieux...

A lire : http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1.5
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4.6

Que voulez-vous faire exactement ?

A +

Mark a écrit:
Bonjour,

Ext ce que il existe une methode pour empecher une procedure stockée pour
qu'elle soit excutée
par plusieurs threads (ou instances d'application) en meme temps ?.
On faite je veux que ma SP ne peut s'executer deux fois ou plus en meme
temps

Merci.





--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Mark
C'est une procedure qui lit un repertoire continuellement et lorsque elle
trouve des fichiers texts, elle fait un bulk insert et je voulais pas que
qu'un fichier soit traité deux fois.
Je pense que la meilleur facon sera de creer un SQL Job

Merci a vous deux de vos reponses, j'ai appris quelque choses.


"Fred BROUARD" wrote in message
news:
Le plus simple est de piloter une transaction au niveau d'isolation
SERIALIZABLE. Mais gare aux blocages possibles. Soyez judicieux...

A lire : http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1.5
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4.6

Que voulez-vous faire exactement ?

A +

Mark a écrit:
Bonjour,

Ext ce que il existe une methode pour empecher une procedure stockée pour
qu'elle soit excutée
par plusieurs threads (ou instances d'application) en meme temps ?.
On faite je veux que ma SP ne peut s'executer deux fois ou plus en meme
temps

Merci.



--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************



Avatar
Fred BROUARD
Mark a écrit:
C'est une procedure qui lit un repertoire continuellement et lorsque elle
trouve des fichiers texts, elle fait un bulk insert et je voulais pas que
qu'un fichier soit traité deux fois.
Je pense que la meilleur facon sera de creer un SQL Job



Oh que oui et de déplacer ou supprimer le fichier une fois letraitement réalisé.

A +



Merci a vous deux de vos reponses, j'ai appris quelque choses.


"Fred BROUARD" wrote in message
news:

Le plus simple est de piloter une transaction au niveau d'isolation
SERIALIZABLE. Mais gare aux blocages possibles. Soyez judicieux...

A lire : http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1.5
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L4.6

Que voulez-vous faire exactement ?

A +

Mark a écrit:

Bonjour,

Ext ce que il existe une methode pour empecher une procedure stockée pour
qu'elle soit excutée
par plusieurs threads (ou instances d'application) en meme temps ?.
On faite je veux que ma SP ne peut s'executer deux fois ou plus en meme
temps

Merci.



--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************