段管理实验

SQL> create table t1(a char(1000)) storage( freelists 3);

Table created.

SQL> insert into t1 values ('I am a DBA!');

1 row created.

SQL> commit;

Commit complete.

select extent_id,file_id,block_id,bytes from dba_extents where segment_name
  2  ='T1';

 EXTENT_ID    FILE_ID   BLOCK_ID      BYTES
---------- ---------- ---------- ----------
         0          1      60465      65536

SQL> oradebug setmypid;
Statement processed.
SQL> alter system dump datafile 1 block 60465;

System altered.

SQL> oradebug tracefile_name;
/u01/app/oracle/admin/shujukuai/udump/shujukuai_ora_23422.trc

SQL> host vi /u01/app/oracle/admin/shujukuai/udump/shujukuai_ora_23422.trc

With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1
System name:    Linux
Node name:      RHEL5.4
Release:        2.6.18-164.el5
Version:        #1 SMP Tue Aug 18 15:51:48 EDT 2009
Machine:        x86_64
Instance name: shujukuai
Redo thread mounted by this instance: 1
Oracle process number: 18
Unix process pid: 23422, image: oracle@RHEL5.4 (TNS V1-V3)

*** 2010-06-05 14:00:58.036
*** ACTION NAME:() 2010-06-05 14:00:58.034
*** MODULE NAME:(sqlplus@RHEL5.4 (TNS V1-V3)) 2010-06-05 14:00:58.034
*** SERVICE NAME:(SYS$USERS) 2010-06-05 14:00:58.034
*** SESSION ID:(142.270) 2010-06-05 14:00:58.034
Start dump data blocks tsn: 0 file#: 1 minblk 60465 maxblk 60465
buffer tsn: 0 rdba: 0x0040ec31 (1/60465)
scn: 0x0000.00098a65 seq: 0x01 flg: 0x00 tail: 0x8a651001
frmt: 0x02 chkval: 0x0000 type: 0x10=DATA SEGMENT HEADER - UNLIMITED
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000007A93600 to 0x0000000007A95600
007A93600 0000A210 0040EC31 00098A65 00010000  [....1.@.e.......]
007A93610 00000000 00000000 00000000 00000000  [................]
007A93620 00000000 00000001 00000007 00001020  [............ ...]
007A93630 00000000 00000001 00000007 0040EC33  [............3.@.]
007A93640 00000000 00000000 00000001 00000001  [................]
007A93650 00000000 00000000 00000000 00000001  [................]
007A93660 00000000 0000CA52 40000000 0040EC32  [....R......@2.@.]
007A93670 00000007 00000000 00000000 00000000  [................]
007A93680 00000000 00000000 00000000 00000000  [................]
        Repeat 250 times
007A94630 00000000 00030000 00010001 00000000  [................]
007A94640 00000000 00000000 00000000 00000000  [................]
007A94650 00000001 00000000 00000000 0040EC32  [............2.@.]
007A94660 0040EC32 00000000 00000000 00000000  [2.@.............]
007A94670 00000000 00000000 00000000 00000000  [................]
        Repeat 247 times
007A955F0 00000000 00000000 00000000 8A651001  [..............e.]
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 7
                  last map  0x00000000  #maps: 0      offset: 4128
      Highwater::  0x0040ec33  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#: 51794  flag: 0x40000000
  Extent Map
  -----------------------------------------------------------------
   0x0040ec32  length: 7

  nfl = 3, nfb = 1 typ = 1 nxf = 0 ccnt = 0                                                                                                   nfl=number of free list /block              type=block type

                                                                                                                                                                       nfb=number of free list group             nxf=number of transaction freelists

  SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
  SEG LST:: flg: USED   lhd: 0x0040ec32 ltl: 0x0040ec32
  SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
  SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
End dump data blocks tsn: 0 file#: 1 minblk 60465 maxblk 60465

 

SQL>begin
 for i in 1..200 loop
 insert into t1 select object_name from dba_objects;
 commit;
 end loop;
 end;
 /

SQL> select count(*) from dba_extents where segment_name='T1';

  COUNT(*)
----------
       274                                            说明现在T1已经有274个区了,再DUMP刚刚那个块

SQL> oradebug setmypid;
Statement processed.
SQL> alter system dump datafile 1 block 60465;

System altered.

SQL> oradebug tracefile_name;
/u01/app/oracle/admin/shujukuai/udump/shujukuai_ora_23422.trc


SQL> host vi /u01/app/oracle/admin/shujukuai/udump/shujukuai_ora_23422.trc
/u01/app/oracle/admin/shujukuai/udump/shujukuai_ora_23422.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1
System name:    Linux
Node name:      RHEL5.4
Release:        2.6.18-164.el5
Version:        #1 SMP Tue Aug 18 15:51:48 EDT 2009
Machine:        x86_64
Instance name: shujukuai
Redo thread mounted by this instance: 1
Oracle process number: 18
Unix process pid: 23422, image: oracle@RHEL5.4 (TNS V1-V3)

*** 2010-06-05 14:00:58.036
*** ACTION NAME:() 2010-06-05 14:00:58.034
*** MODULE NAME:(sqlplus@RHEL5.4 (TNS V1-V3)) 2010-06-05 14:00:58.034
*** SERVICE NAME:(SYS$USERS) 2010-06-05 14:00:58.034
*** SESSION ID:(142.270) 2010-06-05 14:00:58.034
Start dump data blocks tsn: 0 file#: 1 minblk 60465 maxblk 60465
buffer tsn: 0 rdba: 0x0040ec31 (1/60465)
scn: 0x0000.00098a65 seq: 0x01 flg: 0x00 tail: 0x8a651001
frmt: 0x02 chkval: 0x0000 type: 0x10=DATA SEGMENT HEADER - UNLIMITED
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000007A93600 to 0x0000000007A95600
007A93600 0000A210 0040EC31 00098A65 00010000  [....1.@.e.......]
007A93610 00000000 00000000 00000000 00000000  [................]
007A93620 00000000 00000001 00000007 00001020  [............ ...]
007A93630 00000000 00000001 00000007 0040EC33  [............3.@.]
007A93640 00000000 00000000 00000001 00000001  [................]
007A93650 00000000 00000000 00000000 00000001  [................]
007A93660 00000000 0000CA52 40000000 0040EC32  [....R......@2.@.]
007A93670 00000007 00000000 00000000 00000000  [................]
007A93680 00000000 00000000 00000000 00000000  [................]
        Repeat 250 times
007A94630 00000000 00030000 00010001 00000000  [................]
007A94640 00000000 00000000 00000000 00000000  [................]
007A94650 00000001 00000000 00000000 0040EC32  [............2.@.]
007A94660 0040EC32 00000000 00000000 00000000  [2.@.............]
007A94670 00000000 00000000 00000000 00000000  [................]
        Repeat 247 times
007A955F0 00000000 00000000 00000000 8A651001  [..............e.]
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 7
                  last map  0x00000000  #maps: 0      offset: 4128
      Highwater::  0x0040ec33  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#: 51794  flag: 0x40000000                             此64进制转换成10进制为:9288674231451648
  Extent Map
  -----------------------------------------------------------------
   0x0040ec32  length: 7

  nfl = 3, nfb = 1 typ = 1 nxf = 0 ccnt = 0
  SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
  SEG LST:: flg: USED   lhd: 0x0040ec32 ltl: 0x0040ec32
  SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
。。。。。。省略

SQL> select dbms_utility.data_block_address_file(9288674231451648) rfile_id#, dbms_utility.data_block_address_block(9288674231451648) block_id# from dual;

 RFILE_ID#  BLOCK_ID#
----------          ----------
      1023    4194303

SQL> oradebug setmypid;
Statement processed.
SQL> alter system dump datafile 1023 block 4194303;

System altered.

SQL> oradebug tracefile_name;
/u01/app/oracle/admin/shujukuai/udump/shujukuai_ora_23422.trc
SQL> host vi /u01/app/oracle/admin/shujukuai/udump/shujukuai_ora_23422.trc

Unix process pid: 23422, image: oracle@RHEL5.4 (TNS V1-V3)

*** 2010-06-05 14:00:58.036
*** ACTION NAME:() 2010-06-05 14:00:58.034
*** MODULE NAME:(sqlplus@RHEL5.4 (TNS V1-V3)) 2010-06-05 14:00:58.034
*** SERVICE NAME:(SYS$USERS) 2010-06-05 14:00:58.034
*** SESSION ID:(142.270) 2010-06-05 14:00:58.034
Start dump data blocks tsn: 0 file#: 1 minblk 60465 maxblk 60465
buffer tsn: 0 rdba: 0x0040ec31 (1/60465)
scn: 0x0000.00098a65 seq: 0x01 flg: 0x00 tail: 0x8a651001
frmt: 0x02 chkval: 0x0000 type: 0x10=DATA SEGMENT HEADER - UNLIMITED
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000007A93600 to 0x0000000007A95600
007A93600 0000A210 0040EC31 00098A65 00010000  [....1.@.e.......]
007A93610 00000000 00000000 00000000 00000000  [................]
007A93620 00000000 00000001 00000007 00001020  [............ ...]
007A93630 00000000 00000001 00000007 0040EC33  [............3.@.]
007A93640 00000000 00000000 00000001 00000001  [................]
007A93650 00000000 00000000 00000000 00000001  [................]
007A93660 00000000 0000CA52 40000000 0040EC32  [....R......@2.@.]
007A93670 00000007 00000000 00000000 00000000  [................]
007A93680 00000000 00000000 00000000 00000000  [................]
        Repeat 250 times
007A94630 00000000 00030000 00010001 00000000  [................]
007A94640 00000000 00000000 00000000 00000000  [................]
007A94650 00000001 00000000 00000000 0040EC32  [............2.@.]
007A94660 0040EC32 00000000 00000000 00000000  [2.@.............]
007A94670 00000000 00000000 00000000 00000000  [................]
        Repeat 247 times
007A955F0 00000000 00000000 00000000 8A651001  [..............e.]
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 7
                  last map  0x00000000  #maps: 0      offset: 4128
      Highwater::  0x0040ec33  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#: 51794  flag: 0x40000000
  Extent Map
  -----------------------------------------------------------------
   0x0040ec32  length: 7

  nfl = 3, nfb = 1 typ = 1 nxf = 0 ccnt = 0
  SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
  SEG LST:: flg: USED   lhd: 0x0040ec32 ltl: 0x0040ec32
  SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
  SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
End dump data blocks tsn: 0 file#: 1 minblk 60465 maxblk 60465
*** 2010-06-05 14:23:31.206
Start dump data blocks tsn: 0 file#: 1 minblk 60465 maxblk 60465
buffer tsn: 0 rdba: 0x0040ec31 (1/60465)
scn: 0x0000.000c1296 seq: 0x01 flg: 0x00 tail: 0x12961001
frmt: 0x02 chkval: 0x0000 type: 0x10=DATA SEGMENT HEADER - UNLIMITED
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00002AC747E37800 to 0x00002AC747E39800
2AC747E37800 0000A210 0040EC31 000C1296 00010000  [....1.@.........]
2AC747E37810 00000000 00000000 00000000 00000000  [................]
2AC747E37820 00000000 00000112 000B307F 00001020  [.........0.. ...]

段空间手动管理的LMT下,Segment header被用来记录freelist的使用情况,extent的扩展分配情况以及记录HWM等重要信息。 

table/indexobject被建立的时候,被分配一个block用来记录segment header信息。 

随着object的数据量增大,导致 extent大量扩展,初始分配的这一个段头block必然不能维护容纳下当前的信息,Oracle将又继续分配一个/几个block用来存放(这些块,暂且称之为extent map block)。 

Oracle采用链表的方式,将这些块串联起来,用来维护整个segment。 而这个/block的逻辑存储位置,就是前一个segment header/extent map block块里记录中的最后一个extent 的下一个extent的首个块 


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

转载于:http://blog.itpub.net/21158541/viewspace-668113/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值