[Oracle] : comment lister les tables lockées et les dévérouiller ?

Print Friendly, PDF & Email

Un article oracle, cela faisait longtemps il me semble. Lorsqu’un moteur de base de donnée travaille, il est parfois nécessaire pour lui de vérouiller (locker) certains éléments notamment des tables.

Vous pouvez retrouver d’autres articles de ce type sur la page databases.

L’inconvénient c’est que suivant les cas vous ne pouvez plus y accéder. Attention, généralement un lock a toujours une bonne raison d’être posé (sauvegarde en cours, modifications, plantage, processus en attente…). Bien que chaque moteur est conçu pour limiter au maximum ces verrous cela arrive encore (les verrous se trouvent maintenant plus au niveau des lignes que sur des tables entières et le mvcc intervient également). Mais des moteurs comme mysql myisam ne savent pas fonctionner autrement (au profit d’autres intérêts : performance notamment).

Bref, pour oracle, et pour d’autres moteurs avant d’intervenir vous devez identifier pourquoi les tables sont lockées (parfois cela vient de connexions qui bouclent, de sauvegardes en cours qui buggent…). Bref comment lister les tables en question ?

A l’aide d’une requête sur la vue oracle v$locked :

> sqlplus '/ as sysdba'
> select
obj.owner, obj.object_name, obj.object_type,
sess.sid, sess.serial#, sess.status, sess.osuser, sess.machine
from
v$locked_object lock, v$session sess, dba_objects obj
where
sess.sid = lock.session_id and lock.object_id = obj.object_id;

Vous voyez aussi l’intérêt d’appeler aussi la table dba_objects et la vues v$session car vous pouvez plus facilement identifier la session et le user à l’origine du lock. Remarquez aussi que des locks peuvent être posés sur d’autres objets que des tables.

Mais que faire ensuite ? déverrouiller pardi lol !

Et là c’est simple.

> sqlplus '/ as sysdba'> alter table nom_de_table disable table lock;

Voilà je pense que nous avez fait le tour sur cette petite manip que l’on peut demander à un dba oracle.

Découvrez  [SQL] : créez des constantes et des noms de résultats