Quelle ligne est lockée ?

Posted on avril 11th, 2008 in DataBase, Oracle, Tips by David

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_ID
OBJECT_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

 

Post a comment