Comment voulez-vous vérifier si une ligne est verrouillé pour la mise à jour?
Est-il un moyen que l'on peut tester si une ligne a été verrouillé pour la mise à jour dans Oracle?
Supposons, par exemple, la requête suivante, effectuée par un utilisateur:
select * from SOME_TABLE where THE_ID = 1000 for update;
Avec un autre utilisateur, je veux vérifier si la ligne avec THE_ID = 1000
est verrouillé. Si je tente une mise à jour ou quelque chose de la deuxième utilisateur sera bloqué et reste en attente (ne souhaitez pas que).
J'ai également essayé de lancer la requête suivante avec le deuxième utilisateur:
select * from SOME_TABLE where THE_ID = 1000 for update NOWAIT;
Puisque je ne peux pas placer deux verrous sur la même ligne ce sera un échec. Et il le fait. Je reçois un "ORA-00054: resource busy et d'acquérir avec NOWAIT spécifié erreur". Je peux toujours compter sur cette erreur de vérifier la présence de la serrure, ou est-il plus simple et plus propre façon de déterminer si une ligne est-il verrouillé?
Merci!
SeriousCallersOnly: Merci, je suis en effet d'avoir la “ORA-00054: resource busy et d'acquérir avec NOWAIT spécifié erreur”. L'ORA-00942 a été jeté par une autre couche de mon application. Désolé à ce sujet. Je vais modifier la question.
OriginalL'auteur | 2009-10-15
Vous devez vous connecter pour publier un commentaire.
Vous pouvez écrire une procédure POUR la mise à JOUR NOWAIT et retourne un message d'erreur lorsque la ligne est verrouillé:
Maintenant, nous allons construire un petit exemple avec deux sessions:
vous pouvez compter sur ce mécanisme. J'ai ajouté un petit exemple montrant comment la procédure serait de travailler avec deux séances de verrouillage de la même ligne.
OriginalL'auteur Vincent Malgrat
C'est ni simple ni propre, mais l'information est disponible dans le
V$LOCK
etV$SESSION
vues.Toutefois, si vous sentez le besoin d'utiliser quelque chose comme ceci dans le cadre de votre application normale de code, vous avez besoin de réfléchir à nouveau. Les Applications ne doivent pas se soucient de la base de données de verrouillage. Si vous rencontrez des blocages, vous avez besoin de restructurer vos requêtes de sorte qu'ils ne se produisent pas.
OriginalL'auteur kdgregory