06:56:42 sys@FS> execute :file#:=dbms_utility.data_block_address_file(to_number('100150f','xxxxxxxxx'));
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.00
06:57:09 sys@FS> execute :block#:=dbms_utility.data_block_address_block(to_number('100150f','xxxxxxxxx'));
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.00
06:57:21 sys@FS> print file#
FILE#
----------
4
06:57:27 sys@FS> print block#
BLOCK#
----------
5391
退出sqlplus,并再次进入sqlplus(为的是能生成在一个新的trc中)
F:\oracle\product\10.2.0\db_1\BIN>sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on Thu Apr 9 06:59:56 2015 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 06:59:57 sys@FS> alter system dump datafile 4 block 5391; System altered. Elapsed: 00:00:00.14 07:00:00 sys@FS>
在udump下获得trc文件:该文件有1600多行,因此不全部列出。以“Leaf block dump”为关键字搜索该文件:
Leaf block dump =============== header address 128074340=0x7a24264 kdxcolev 0 KDXCOLEV Flags = - - - kdxcolok 0 kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y kdxconco 3 kdxcosdc 0 kdxconro 288 kdxcofbo 612=0x264 kdxcofeo 1442=0x5a2 kdxcoavs 830 kdxlespl 0 kdxlende 0 kdxlenxt 16782608=0x1001510 kdxleprv 16782606=0x100150e kdxledsz 0 kdxlebksz 8036 row#0[8013] flag: ------, lock: 0, len=23 col 0; len 5; (5): 31 30 36 31 31 -------------->这是索引列的值 col 1; len 7; (7): 78 73 04 08 0f 3c 19--------->这是索引列的值 col 2; len 6; (6): 01 00 14 26 01 66------------>这是16进制的rowid row#1[7990] flag: ------, lock: 0, len=23 col 0; len 5; (5): 31 30 36 31 32 col 1; len 7; (7): 78 73 04 08 0f 3c 19 col 2; len 6; (6): 01 00 14 26 01 67 row#2[7967] flag: ------, lock: 0, len=23 col 0; len 5; (5): 31 30 36 31 33 col 1; len 7; (7): 78 73 04 08 0f 3c 19 col 2; len 6; (6): 01 00 14 26 01 68 row#3[7944] flag: ------, lock: 0, len=23 col 0; len 5; (5): 31 30 36 31 34 col 1; len 7; (7): 78 73 04 08 0f 3c 19 col 2; len 6; (6): 01 00 14 26 01 69 ..................................... row#287[1442] flag: ------, lock: 0, len=23 col 0; len 5; (5): 31 30 38 37 30 col 1; len 7; (7): 78 73 04 08 0f 3c 19 col 2; len 6; (6): 01 00 14 27 00 eb ----- end of leaf block dump ----- End dump data blocks tsn: 4 file#: 4 minblk 5391 maxblk 5391
下面来分析16进制的rowid:
01 00 14 26 01 66 --->这是16进制
00000001 00000000 00010100 00100110 00000001 01100110 --->这是换算成2进制后的(对01用calc.exe换算,对00用calc.exe换算,对14用calc.exe换算,等等)
00000001 00 ---->文件号 :4 ------------------------------------->4是换算成10进制后的值(使用calc.exe换算)
000000 00010100 00100110 ----->块号 :5158 ------------------------->5158是换算成10进制后的值(使用calc.exe换算)
00000001 01100110 ---->行号:358 ------------->358是是换算成10进制后的值(使用calc.exe换算)
前十位表示文件号
中间22位表示块号
最后16位表示行号
下面来分析2个索引值:
col 0; len 5; (5): 31 30 36 31 31 -------------->这是索引列的值 col 1; len 7; (7): 78 73 04 08 0f 3c 19--------->这是索引列的值 使用函数f_get_from_dump将上述值转换 (该函数来自travel大师:http://www.traveldba.com/wp-content/uploads/scripts/f_get_from_dump.sql)