Hello everybody.
Quelle est la durée d'un lock pour un verrou en exclusive mode sur une table ?
Est-il possible de le modifier ? si oui comment.
Hello everybody.
Quelle est la durée d'un lock pour un verrou en exclusive mode sur une table ?
Est-il possible de le modifier ? si oui comment.
En général un verrou sur une ligne ou une table est détenu jusqu'à la fin de la transaction qui l'a demandé (sauf cas particulier). On peut cependant demander une verrou avec l'option NOWAIT qui retourne immédiatement une erreur si le verrou est déjà pris.
S'agit-il d'un lock provenant d'une modification faite par DB_LINK ?
Si oui tu as eu l'erreur ORA-02049 et une façon de faire est de modifier la valeur du paramètre _distributed_lock_timeout
Cependant ce n'est pas la meilleur des évolutions possible, le mieux étant de traiter ce type de timeout au niveau applicatif.
C'est un simple lock table xxx in exclusive mode, pas de dblink.
Dans ce cas tu fais choisis le mode NOWAIT et tu catch le ORA qui va bien si la ressource est utilisée avec un retry.
le lock est créé pour la durée de la transaction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select empno from emp where ename='SCOTT' for update wait 5;
le lock est levé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part commit;
le paramètre wait/nowait n'influence pas la durée du lock, mais permets d'attendre 5 secondes au cas où un lock serait déjà existant dans une autre session. Si après 5 secondes le lock ne peut être obtenu, l'erreur ORA-30006: resource busy;acquire with WAIT timeout expired est retournée
N'oublie pas de mentionner la version![]()
J'ai bien constaté que le lock est levé dés un commit/rollback.
Les développeurs du projet sur lequel j'interviens ont positionné un lock en exclusive afin de bloquer les autres traitements tant que le premier n'est pas terminé.
version : 9.2.0.8 sous Solaris.![]()
tu peux toujours faire un alter system kill developpeur si tu es dba![]()
Voici l'erreur que j'ai eu lors d'un lock suite à un delete sur une table référencée.
Donc, il n'y a pas eu d'attente de commit/rollback du bloquant.
la durée est de 60 s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ORA-02049: timeout: distributed transaction waiting for lock Cause: exceeded INIT.ORA distributed_lock_timeout seconds waiting for lock. Action: treat as a deadlock
C'est parce qu'il s'agit d'une transaction distribuée (qui fait intervenir plusieurs bases de données distinctes). Dans ce cas, les règles ne sont pas les mêmes que pour une transaction locale (qui ne concerne qu'une seule base). Dans ce cas vous pouvez envisager d'augmenter la valeur du paramètre DISTRIBUTED_LOCK_TIMEOUT.
Bonjour,
j'ai un peu le même genre de question: (Ora10gr2 10.2.0.4)
Lorsqu'on fait du DDL et que par exemple on ajoute une colonne, un verrou de type '6' exclusif(X) est créé.
Est-ce que cette table restera bloquée en modification de structure pendant toute la durée de la session qui a modifié la table en premier ?
Ou jusqu'à un commit ?
Mais une sorte de ''commit automatique'' n'est-t-il pas généré par la réussite de la modification de la table ?
Finalement, combien de temps devrai-je attendre avant de pouvoir rajouter une colonne sur cette table par exemple ?
Bonjour,
En 11g le parametre ddl_lock_timeout est apparu pour fixer le "wait" des DDL, par défaut il est à 0.
Crdlt,
Partager