Quelle ligne est lockée ?
Ca peut arriver … deux sessions cherchent a verrouiller la même ligne … mais laquelle ?
SID|USERNAME |OSUSER |TY|LKMODE |DESCRIP | SEC| Blocking|REQMODE ----|--------------|--------------|--|-------------|--------------------------------------------------|----------|----------|------------- 20|David |David |TM|Row-X (SX) |Table David .TOTO | 3| 0| 18|David |David |TM|Row-X (SX) |Table David .TOTO | 6| 0| 20|David |David |TX|None |RBS RS_1, Slot 41 Wrap# 791759 | 3| 0|Exclusive (X) 18|David |David |TX|Exclusive (X)|RBS RS_1, Slot 41 Wrap# 791759 | 6| 1|
Voila c’est plutôt génant … maitenant imaginons que nous avons besoin de savoir sur quelle ligne le verrou est placé :
David @REF.WORLD> r 1 select do.object_name,row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#,dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW# ) 2 from v$session s, dba_objects do 3* where sid=20 and s.ROW_WAIT_OBJ# = do.OBJECT_IDOBJECT_NAME|ROW_WAIT_OBJ#|ROW_WAIT_FILE#|ROW_WAIT_BLOCK#|ROW_WAIT_ROW#|DBMS_ROWID.ROWID_C -----------|-------------|--------------|---------------|-------------|------------------ TOTO | 16625| 13| 168237| 14|AAAEDxAANAAApEtAAO
Pas mal!
on n’a plus qu’a aller voir la ligne :
David @REF.WORLD> select * from TOTO where ROWID = 'AAAEDxAANAAApEtAAO';
ID|TEST
----------|----------
11|TEST
