首页 > 数据库 > Oracle > treedump中定位块儿转储所需的文件和块儿号
首先为测试建立序列、表和索引:
SQL>create sequence seq1;
序列已创建。
SQL>create table test as
2 select seq1.nextval seq,object_id,object_name from dba_objects
3 where rownum<8000;
表已创建。
SQL>create index idx_test on test(seq) pctfree 0;
索引已创建。
SQL>select object_id,object_name from user_objects
2 where object_name like 'IDX_%';
OBJECT_ID OBJECT_NAME
---------- ----------
52403 IDX_TEST
SQL>alter session set events 'immediate trace name treedump level 52403';
会话已更改。
SQL>
[@more@]trace文件的dump内容如下:
*** 2011-08-18 13:19:54.234
*** ACTION NAME:() 2011-08-18 13:19:54.218
*** MODULE NAME:(SQL*Plus) 2011-08-18 13:19:54.218
*** SERVICE NAME:(SYS$USERS) 2011-08-18 13:19:54.218
*** SESSION ID:(147.53) 2011-08-18 13:19:54.218
----- begin tree dump
branch: 0x10016f4 16783092 (0: nrow: 15, level: 1)
leaf: 0x10016f5 16783093 (-1: nrow: 540 rrow: 540)
leaf: 0x10016f6 16783094 (0: nrow: 533 rrow: 533)
leaf: 0x10016f7 16783095 (1: nrow: 533 rrow: 533)
leaf: 0x10016f8 16783096 (2: nrow: 533 rrow: 533)
leaf: 0x10016f9 16783097 (3: nrow: 533 rrow: 533)
leaf: 0x10016fa 16783098 (4: nrow: 533 rrow: 533)
leaf: 0x10016fb 16783099 (5: nrow: 533 rrow: 533)
leaf: 0x10016fc 16783100 (6: nrow: 533 rrow: 533)
leaf: 0x10016fd 16783101 (7: nrow: 533 rrow: 533)
leaf: 0x10016fe 16783102 (8: nrow: 533 rrow: 533)
leaf: 0x10016ff 16783103 (9: nrow: 533 rrow: 533)
leaf: 0x1001700 16783104 (10: nrow: 533 rrow: 533)
leaf: 0x1001702 16783106 (11: nrow: 533 rrow: 533)
leaf: 0x1001703 16783107 (12: nrow: 533 rrow: 533)
leaf: 0x1001704 16783108 (13: nrow: 530 rrow: 530)
----- end tree dump 这个枝叶 点共有14行,索引到15行
一开始不知道branch: 0x10016f4 16783092 代表DBA,因此迷惑半天,查了dba_extentsb表(有一定的关系)。
知道branch: 0x10016f4 16783092 代表的DBA,因此通过如下:
SELECT DBMS_UTILITY.data_block_address_file (
TO_NUMBER (LTRIM ('0x10016f4', '0x'), 'xxxxxxxx'))
AS file_no,
DBMS_UTILITY.data_block_address_block (
TO_NUMBER (LTRIM ('0x10016f4', '0x'), 'xxxxxxxx'))
AS block_no
FROM DUAL;
或
SELECT dbms_utility.data_block_address_block(16783092) "BLOCK",
dbms_utility.data_block_address_file(16783092) "FILE"
FROM dual;
结果中知道对文件号为4,块儿号为5876 ,该block_id就是
select * from dba_extents e where e.segment_name='IDX_TEST' 的结果中extent_id=0所对应的block_id+3,,即5873+3=5876。
定位(4/5876)索引枝叶快后,根据如下指令转储块儿内容更:
SQL> alter system dump datafile 4 block 5876;
System altered
SQL> SELECT a.VALUE || b.symbol || c.instance_name || '_ora_' || d.spid || '.trc' TRACE_FILE_NAME
2 FROM (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') a,
3 (SELECT SUBSTR (VALUE, -6, 1) symbol FROM v$parameter
4 WHERE NAME = 'user_dump_dest') b,
5 (SELECT instance_name FROM v$instance) c,
6 (SELECT spid FROM v$session s, v$process p, v$mystat m
7 WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d
8 /
TRACE_FILE_NAME
--------------------------------------------------------------------------------
F:ORACLEADMINKUQLAN10UDUMPkuqlan10_ora_5736.trc
Trace文件的部分内容如下:
Block header dump: 0x010016f4
Object id on Block? Y
seg/obj: 0xccb3 csc: 0x00.1d71e7 itc: 1 flg: E typ: 2 - INDEX
brn: 0 bdba: 0x10016f1 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0xffff.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.001d71e7
Branch block dump
=================
header address 138511436=0x841844c
kdxcolev 1
KDXCOLEV Flags = - - -
kdxcolok 0
kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
kdxconco 2
kdxcosdc 0
kdxconro 14
kdxcofbo 56=0x38
kdxcofeo 7934=0x1efe
kdxcoavs 7878
kdxbrlmc 16783093=0x10016f5
kdxbrsno 0
kdxbrbksz 8060
kdxbr2urrc 0
row#0[8051] dba: 16783094=0x10016f6
col 0; len 3; (3): c2 06 2a
col 1; TERM
row#1[8042] dba: 16783095=0x10016f7
col 0; len 3; (3): c2 0b 4b
col 1; TERM
row#2[8033] dba: 16783096=0x10016f8
col 0; len 3; (3): c2 11 08
col 1; TERM
row#3[8024] dba: 16783097=0x10016f9
col 0; len 3; (3): c2 16 29
col 1; TERM
row#4[8015] dba: 16783098=0x10016fa
col 0; len 3; (3): c2 1b 4a
col 1; TERM
row#5[8006] dba: 16783099=0x10016fb
col 0; len 3; (3): c2 21 07
col 1; TERM
row#6[7997] dba: 16783100=0x10016fc
col 0; len 3; (3): c2 26 28
col 1; TERM
row#7[7988] dba: 16783101=0x10016fd
col 0; len 3; (3): c2 2b 49
col 1; TERM
row#8[7979] dba: 16783102=0x10016fe
col 0; len 3; (3): c2 31 06
col 1; TERM
row#9[7970] dba: 16783103=0x10016ff
col 0; len 3; (3): c2 36 27
col 1; TERM
row#10[7961] dba: 16783104=0x1001700
col 0; len 3; (3): c2 3b 48
col 1; TERM
row#11[7952] dba: 16783106=0x1001702
col 0; len 3; (3): c2 41 05
col 1; TERM
row#12[7943] dba: 16783107=0x1001703
col 0; len 3; (3): c2 46 26
col 1; TERM
row#13[7934] dba: 16783108=0x1001704
col 0; len 3; (3): c2 4b 47
col 1; TERM
----- end of branch block dump -----
End dump data blocks tsn: 4 file#: 4 minblk 5876 maxblk 5876
这个枝叶中也有14行,这个结果和treedump的结果类似;
如下是DSI中branch block dump结构介绍图:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18841027/viewspace-1054010/ ,如需转载,请注明出处,否则将追究法律责任。