ITPub博客

首页 > 数据库 > Oracle > treedump中定位块儿转储所需的文件和块儿号

treedump中定位块儿转储所需的文件和块儿号

原创 Oracle 作者:kuqlan 时间:2011-08-18 15:11:56 0 删除 编辑

首先为测试建立序列、表和索引:

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结构介绍图:

branch block dump

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18841027/viewspace-1054010/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle技术爱好者,Oracle10g OCM,网名 KUQLAN ,具有7的年Oracle数据库管理实践,曾经参加过BOSS、ERP、云计算(OpenStack+kvm)等项目的一线工作。以前写博客是为了自己,而现在是为了自己和别人。因为领会了帮助别人和分享、沉淀和积累会创造快乐和价值...

注册时间:2009-01-26

  • 博文量
    183
  • 访问量
    1681018