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/index等object被建立的时候,被分配一个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/