oracle的数据块学习兼学习trac文件分析

今天学习了oracle的数据块的相关知识,这里再兼谈下trac文件的分析,
1 创建一个表:
SQL> create table block_test

2 (id varchar2(4) primary key,

3 name varchar2(20))

4 tablespace test;

Table created

SQL> insert into block_test values (’0001′,’TOM’);

1 row inserted

SQL> commit;

Commit complete

我们建立了一个数据表block_test ,并向其中插入了一条数据。想要看这个表中的数据是怎么样在oracle中存储的,首先要找到这条数据库存储在哪个数据文件上,哪个数据块中。

查找数据块地址:

SQL> select id,name,rowid from block_test;

ID NAME ROWID

—- ——————– ——————

0001 TOM AAAOJuAANAAAATCAAA
SQL>select dbms_rowid.rowid_relative_fno(’AAAOJuAANAAAATCAAA’) file_num,

dbms_rowid.rowid_block_number(’AAAOJuAANAAAATCAAA’) block_num from dual;

file_num block_num

—————————— ——————————

8 1218
由此得知这条记录存储在数据中的标号为8的数据文件的第2523个块中。

导出data block结构:

SQL> alter system dump datafile 8 block 1218;

System altered


2 这个时候,可以先看下trc文件放在什么地方,
show parameter dump
这里我的是放在oracle\udump下,
按时间顺序找出这个trc文件。

3 注意,这里插一下,我们可以直接打开这个trc文件去看,而不是去用分析工具去分析这个文件,本文最后会再说如何用工具去分析这个trac文件:
打开这个TRAC文件后,发现如下:
Start dump data blocks tsn: 14 file#: 13 minblk 1218 maxblk 1218
buffer tsn: 14 rdba: 0x034004c2 (13/1218)
scn: 0x0000.00d323eb seq: 0x05 flg: 0x06 tail: 0x23eb0605
frmt: 0x02 chkval: 0xc1e1 type: 0x06=trans data
Block header dump: 0x034004c2
Object id on Block? Y
seg/obj: 0xe26e csc: 0x00.d323e2 itc: 2 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0004.01a.000031e9 0x008073ae.183a.30 --U- 1 fsc 0x0000.00d323eb
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000

data_block_dump,data header at 0x40c025c
===============
tsiz: 0x1fa0
hsiz: 0x14
pbl: 0x040c025c
bdba: 0x034004c2
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f94
avsp=0x1f80
tosp=0x1f80
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0x1f94
block_row_dump:
tab 0, row 0, @0x1f94
tl: 12 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 4] 30 30 30 31
col 1: [ 3] 54 4f 4d
end_of_block_dump


解析下;
tsn:data block所在表空间序号

file#: data block所在数据文件序号

minblk:dump的开始块号

maxblk:dump的终止块号

rdba:数据块地址

scn:scn号

seq:序列号

tail:保持一致性 lower scn + type + seq

frmt: oracle8以上为2

chkval:可选择的校验值

type:block的类型


itc: itl slots的个数,此时多少个事务在对本data block进行操作

flg: 0=on the freelist

fsl: itl tx freelist slot

fnx: dba of next block on freelist

Itl:interested transaction list index

Xid:transaction id

Uba:undo address

Flag:事务状态标志

Lck:事物所影响行的数量

col 0: [ 4] 30 30 30 31 //第一列中数据长度为4,数据为30 30 30 31

col 1: [ 3] 54 4f 4d //第一列中数据长度为3,数据为54 4f 4d

以上信息就是我们刚才查找的那条记录在数据库中真实的存储情况

table:记录所在表的序号

row:记录在块中所在行号

tl:rowsize(number of bytes plus data)

fb:记录的状态

lb:lock byte—itl entry then has this row locked

cc: number of columns in this row piece



end_of_block_dump

End dump data blocks tsn: 7 file#: 8 minblk 2523 maxblk 2523


4) 最后说下如何使用跟踪文件去跟踪,
这里有篇好文,讲的很好,地址是:
http://blog.sina.com.cn/s/blog_4b1c9e12010007a0.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值