纸上得来终觉浅,绝知此事要躬行

模拟行链接

上一篇 / 下一篇  2008-04-06 18:41:40 / 个人分类:oracle管理

1.创建测试表T,该表每一行长度8000个字节,由于block大小为8192字节,考虑到pct_free默认设置为10,则每个block将容纳不下每一行数据。


 
SQL> create table t (a char(2000),b char(2000),c char(2000),d char(2000));
 
Table created.

SQL> select pct_free,pct_used from user_tables where table_name='T';
 
  PCT_FREE   PCT_USED
---------- ----------
        10         40


SQL> insert into t select 'a','b','c','d'
  2  from sys.dba_objects
  3  where rownum<=500;
 
500 rows created.

2.分析表,并查看该表所占用的block数。

SQL>   exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T');
 
PL/SQL procedure successfully completed.
 
SQL>
SQL> select blocks from user_tables where table_name='T';
 
    BLOCKS
----------
      1000

可见,500行的数据占用了1000个block。为了更加直观的看到发生了行链接,可以dump数据块

SQL> l
  1* select owner,segment_name,file_id,block_id from dba_extents where segment_name='T' and wner='SCOTT' and file_id=2
SQL> a  order by 4;
  1* select owner,segment_name,file_id,block_id from dba_extents where segment_name='T' and wner='SCOTT' and file_id=2 order by 4
SQL> /
 
OWNER                          SEGMENT_NAME                                          FILE_ID   BLOCK_ID
------------------------------ -------------------------------------------------- ---------- ----------
SCOTT                          T                                                           2      18953
SCOTT                          T                                                           2      18961
SCOTT                          T                                                           2      18969
SCOTT                          T                                                           2      18977
SCOTT                          T                                                           2      18985
SCOTT                          T                                                           2      18993
SCOTT                          T                                                           2      19001
SCOTT                          T                                                           2      19081
SCOTT                          T                                                           2      19209
SCOTT                          T                                                           2      19337
SCOTT                          T                                                           2      19465
 
OWNER                          SEGMENT_NAME                                          FILE_ID   BLOCK_ID
------------------------------ -------------------------------------------------- ---------- ----------
SCOTT                          T                                                           2      19593
SCOTT                          T                                                           2      19721
SCOTT                          T                                                           2      19849
SCOTT                          T                                                           2      20721
 
15 rows selected.
 
SQL> alter system dump datafile 2 block 18953;


System altered.

查看生成的dump文件:

Start dump data blocks tsn: 3 file#: 2 minblk 18953 maxblk 18953
buffer tsn: 3 rdba: 0x00804a09 (2/18953)
scn: 0x0000.0048b779 seq: 0x01 flg: 0x04 tail: 0xb7790601
frmt: 0x02 chkval: 0x4dce type: 0x06=trans data
Block header dump:  0x00804a09
 Object id on Block? Y
 seg/obj: 0x1cac  csc: 0x00.48b779  itc: 2  flg: -  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0016.00f.0000000c  0x0140111b.0049.19  C---    0  scn 0x0000.0048b778
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
 
data_block_dump,data header at 0xaa84e5c
===============
tsiz: 0x1fa0
hsiz: 0x14
pbl: 0x0aa84e5c
bdba: 0x00804a09
     76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f66
avsp=0x1f52
tosp=0x1f52

0xe:pti[0]      nrow=1  ffs=0
0x12:pri[0]     ffs=0x1f66
block_row_dump:
tab 0, row 0, @0x1f66
tl: 58 fb: --H-F--N lb: 0x0  cc: 1
nrid:  0x00c004b8.0
col  0: [48]
 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
end_of_block_dump
End dump data blocks tsn: 3 file#: 2 minblk 18953 maxblk 18953
 

Dump文件中有红色标出的nrid就是行链接的ROWID信息。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-05  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 1566
  • 日志数: 65
  • 图片数: 2
  • 影音数: 1
  • 建立时间: 2008-02-29
  • 更新时间: 2008-09-04

RSS订阅

Open Toolbar