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.
Il arrive parfois que l’instance soit bloquée et qu’il faille faire un shutdown abort puis redémarrer.
Mais si on ne fait rien, on ne pourra pas analyser la root cause du problème.
Pour avoir les infos sur la situation de blocage (hanganalyze) et les infos complètes du système à ce moment là (systemstate), afin de pouvoir analyser et/ou ouvrir un SR, il faut penser à générer les dumps correspondants:
oradebug setmypid
oradebug unlimit
oradebug hanganalyze 3
oradebug dump ashdumpseconds 30
oradebug systemstate 266
oradebug tracefile_name
Si la situation est telle qu’on n’arrive même pas à se connecter sysdba, il est possible d’essayer la connection -prelim et de s’attacher à une session existante (le process DIAG par exemple):
oradebug setorapname diag
oradebug unlimit
oradebug hanganalyze 3
oradebug dump ashdumpseconds 30
oradebug systemstate 266
oradebug tracefile_name
Si par contre on peut se connecter et faire des requêtes, la vue V$WAIT_CHAINS donne les infos sur les sessions bloquées.
Un exemple où une session a posé plusieurs verrous puis attend sur un dbms_lock.sleep (‘PL/SQL lock timer’), bloquant des session qui attendent de poser leur verrou (enq: TM – contention)
CHAIN_ID | CHAIN | CHAIN_SIGNATURE | INSTANCE | OSID | PID | SID | BLOCK |
---|---|---|---|---|---|---|---|
1 | FALSE | ‘PL/SQL lock timer’ <='enq: TM – contention' <='enq: TM – contention' |
1 | 7929 | 42 | 23 | TRUE |
1 | FALSE | ‘PL/SQL lock timer’ <='enq: TM – contention' <='enq: TM – contention' |
1 | 7927 | 41 | 254 | TRUE |
1 | FALSE | ‘PL/SQL lock timer’ <='enq: TM – contention' <='enq: TM – contention' |
1 | 7925 | 39 | 256 | FALSE |
2 | FALSE | ‘PL/SQL lock timer’ <='enq: TM – contention' <='enq: TM – contention' |
1 | 7933 | 46 | 25 | TRUE |
3 | FALSE | ‘PL/SQL lock timer’ <='enq: TM – contention' <='enq: TM – contention' |
1 | 7931 | 45 | 260 | TRUE |
4 | FALSE | ‘PL/SQL lock timer’ <='enq: TM – contention' <='enq: TM – contention' |
1 | 7935 | 47 | 262 | TRUE |
On voit toute la chaîne des session bloquées, avec la racine. Et même lorsque qu’il ne s’agit pas d’une session utilisateur active.