日期:2014-05-16  浏览次数:20546 次

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