Comment savoir si une table est lockée ?

Comment savoir si une table est lockée ? - SQL/NoSQL - Programmation

Marsh Posté le 01-07-2008 à 16:14:29    

Bonjour tous le monde,
 
J'ai besoin de modifier la structure d'une table par le biais d'un dev en VB et pour cela je dois savoir si elle est en cours d'utilisation pour éviter les conflits.  
Comment puis-je récupérer cette information ? Après de nombreuses recherches, je sais que ce n'est pas dans la table syslocks de la base master.

Reply

Marsh Posté le 01-07-2008 à 16:14:29   

Reply

Marsh Posté le 01-07-2008 à 16:32:17    

Ben c'est simple...
 
Tu fais ton Alter.
Il va demander un lock exclusif sur la table.
Tous les locks existants vont donc rester et partir petit à petit.
Et aucun nouveau lock ne sera accepté, il seront mis en file d'attente.
Une fois tous les locks partis, le alter va se faire.
Le lock de l'alter va laisser sa place à tous les nouveaux qui sont en file d'attente.
 
En gros, mise à part figer les utilisateurs quelques secondes/minutes (selon la durée du traîtement Alter, et si une personne est partie boire un café en laissant un lock ouvert sur la table), ça ne dois pas avoir d'impact sur l'exploitation...

Reply

Marsh Posté le 01-07-2008 à 16:34:18    

Et de toute façon c'est pas parceque "là maintenant tout de suite, y'a pas de lock" que "dans la µs suivante, y'a pas 100000 locks sur la table"
 
Donc ça sert à rien d'aller voir si y'a des locks. Tant que t'as pas obtenu le tiens, tu ne seras jamais sûr de rien.
 
Sinon, tu peux locker la table avec un SELECT juste avant :
 
BEGIN TRAN
SELECT NULL FROM [matable] WITH XLOCKX
 
--- tant que tu commit pas, la table sera lockée entièrement en mode exclusif : seul toi à le droit d'y accéder
 
cependant, un ALTER n'étant pas transactionnel, je sais pas ce que ça donne de tenter un alter au milieu d'une transaction. à mon avis ça va te claquer à la gueule et ça me semble logique.


Message édité par MagicBuzz le 01-07-2008 à 16:35:31
Reply

Marsh Posté le 01-07-2008 à 16:49:53    

OK merci MagicBuzz. Je vais tester ta solution.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed