手动管理的segment的block结构

在手动管理的block中,采用手动管理的本地管理表空间中的段和数据字典管理的表空间中的段
中的空闲数据块的管理都使用位于段头部的空闲列表来管理,例如SYSTEM表空间是本地管理表空
间,但是它是采用了手动段空间管理,所以也是用FREELIST来管理段中的空闲数据块的。
空闲列表是一个逻辑上的链表,在段的HEADER BLOCK中记录了一个指向第一个空闲块的BLOCK ADDRESS,第一个DB BLOCK中同时也记录了指向下一个空闲块的BLOCK ADDRESS。以此形成一个单向链表。
试验过程:
1、新建一个手动管理的表空间
create tablespace user_test datafile 
'C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\user_test01.DBF'
size 20M
EXTENT MANAGEMENT LOCAL 
SEGMENT SPACE MANAGEMENT MANUAL;

2、在其中新建表:
CREATE TABLE T3 (ID NUMBER)
TABLESPACE USER_TEST

3、先插入3条记录:
INSERT INTO T3(ID) VALUES(2);
INSERT INTO T3(ID) VALUES(3);
INSERT INTO T3(ID) VALUES(4);
4、查看表占据的block
SELECT * FROM user_EXTENTS WHERE segment_name='T3' --查看到的开始block为9
select id,DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid),DBMS_ROWID.ROWID_OBJECT(rowid)
from t3 --查看到blockid为10
这时表至少占据了两个block的空间
5、dump出9的block:
alter system dump datafile 6 block 9
Start dump data blocks tsn: 15 file#: 6 minblk 9 maxblk 9
buffer tsn: 15 rdba: 0x01800009 (6/9)
scn: 0x0000.002db04a seq: 0x01 flg: 0x00 tail: 0xb04a1001
frmt: 0x02 chkval: 0x0000 type: 0x10=DATA SEGMENT HEADER - UNLIMITED--第一个block的类型
.
.
.

Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 7    
                  last map  0x00000000  #maps: 0      offset: 4128 
      Highwater:: 0x0180000b(下一个空闲block) ext#: 0      blk#: 1      ext size: 7    
  #blocks in seg. hdr's freelists: 1    
  #blocks below: 1    
  mapblk  0x00000000  offset: 0    
                   Unlocked
     Map Header:: next  0x00000000  #extents: 1    obj#: 53443  flag: 0x40000000
  Extent Map
  -----------------------------------------------------------------
   0x0180000a  length: 7    
 
  nfl = 1, nfb = 1 typ = 1 nxf = 0 ccnt = 1
  SEG LST:: flg: USED   lhd: 0x0180000a ltl: 0x0180000a --空闲的block


6、测试将0x0180000a这个block塞满,
执行:
BEGIN
FOR i in 1..1000 loop
insert  into t3 values(i);
end loop;
commit;
END;

7、之后在dump出9这个block

Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 7    
                  last map  0x00000000  #maps: 0      offset: 4128 
      Highwater::   0x0180000c  ext#: 0      blk#: 2      ext size: 7    
  #blocks in seg. hdr's freelists: 1    
  #blocks below: 2    
  mapblk  0x00000000  offset: 0    
                   Unlocked
     Map Header:: next  0x00000000  #extents: 1    obj#: 53443  flag: 0x40000000
  Extent Map
  -----------------------------------------------------------------
   0x0180000a  length: 7    
 
  nfl = 1, nfb = 1 typ = 1 nxf = 0 ccnt = 2
  SEG LST:: flg: USED   lhd: 0x0180000b ltl: 0x0180000b


红色标记处发生了变化。


以上为原创,转载请注明出处。

猜你喜欢

转载自yangyoupeng-cn-fujitsu-com.iteye.com/blog/1594588