資料庫中看到發生dead lock的競爭,看pmon的trace file有看到很多process是wait在block file#: 18 rdba: 0x048567af flg: 0x00080000 st: 0x04 mode: 0x02上,
如下所示:

waiting for block file#: 18 rdba: 0x048567af flg: 0x00080000 st: 0x04 mode: 0x02
deletion of process 4025b9bc988 pid=726 seq=2 unsuccessful

我們可以透過下面的方式找出block所在的object name.

這裡面很重要的是要將rdba值所對應的data file block找出來,我們之後才可以透過dba_extents來將object找出來.

而有關rdba的說明請參考eygle blog上的說明.
(ref:http://www.eygle.com/archives/2007/07/function_rdba_convert.html)

由於rdba值是一個16進位值,必須透過轉換將其轉換成10進位,轉換的方式亦請參考eygle blog文件.
(ref:http://www.eygle.com/archives/2004/06/oracle_howto_convert.html)

SQL> variable file# number
SQL> variable block# number
SQL> execute :file#:=dbms_utility.data_block_address_file(to_number('48567af','xxxxxxx'));

PL/SQL procedure successfully completed.

SQL> execute :block#:=dbms_utility.data_block_address_block(to_number('48567af','xxxxxxx'));

SQL> print file#

     FILE#
----------
        18

SQL> print block#

    BLOCK#
----------
    354223

透過dba_extents找出block_id所在的object.

SQL> select * from dba_extents;

OWNER    SEGMENT_NAME    PARTITION_NAME    SEGMENT_TYPE    TABLESPACE_NAME    EXTENT_ID    FILE_ID    BLOCK_ID    BYTES    BLOCKS    RELATIVE_FNO
DBDIA    IND4_D0001        INDEX    DBDIA_IDX    136    18    357897    8388608    1024    18
DBDIA    IND_D0001        INDEX    DBDIA_IDX    121    18    356873    8388608    1024    18
DBDIA    IND3_D0001        INDEX    DBDIA_IDX    125    18    355849    8388608    1024    18
DBDIA    IND1_D0001        INDEX    DBDIA_IDX    134    18    354825    8388608    1024    18
DBDIA    IND5_D0001        INDEX    DBDIA_IDX    127    18    353801    8388608    1024    18
DBDIA    IND2_D0001        INDEX    DBDIA_IDX    124    18    352777    8388608    1024    18
DBDIA    IND3_D0001        INDEX    DBDIA_IDX    124    18    351753    8388608    1024    18
DBDIA    IND1_D0001        INDEX    DBDIA_IDX    133    18    350729    8388608    1024    18
<略>

arrow
arrow
    全站熱搜

    噗噗噗的潛水珽 發表在 痞客邦 留言(0) 人氣()