L’event 10704 pour tracer les verrous

La version détaillée est en anglais sur mon blog à dbi services.
Ici un résumé, laissez un commentaire ici pour plus de détail en français.

On peut voir les verrous posés avec V$LOCK mais certaines verrous ne durent pas longtemps.
Si on veut connaitre exactement les verrous posés par une commande SQL (pour vérifier si une opération est réellement online par exemple) on peut utiliser l’event 10704.

On l’active avec:

alter session set events='10704 trace name context forever, level 3';
Session altered.

et le désactive avec

alter session set events='10704 trace name context off';
Session altered.

Sur le dump généré, je récupère les lignes qui m’intéressent avec un grep -E sur:

ksqgtl [*]{3}|ksqrcl: [A-Z]|ksqcnv: [A-Z]

Il faut aussi avoir les object_id en hexadécimal:

select object_id , to_char(object_id,'0XXXXXXX') , object_name,object_type from all_objects

Exemples:

On a l’acquisition d’un verrou (ici en mode 4 qui est Share):

ksqgtl *** TM-00017EA8-00000000-00000000-00000000 mode=4

La conversion du verrou vers un autre mode:

ksqcnv: TM-00017EA8-00000000-00000000-00000000 mode=3

La libération du verrou:

ksqrcl: TM-00017EA8-00000000-00000000-00000000

C’est avec cet évent que j’étudie le comportement des verrous de version en version, par exemple ici

Laisser un commentaire