网站建设
联系我们

rowid 的含义,位图块和空闲列表对比

发布于:2014-02-11 11:46来源:未知 作者:admin 点击:
  Rowid 行标识
select rowid,ename from emp;
AAAMfP AAE AAAAAg AAA
对象代码 文件 块 行
为了能描述更多的行,rowid 是64 进制的,由0-9,a-z,A-Z,+,/ 组成
ROWID 是伪列,计算出来的,索引使用它,表中并没有存储rowid,每一行的rowid 是根据该
行的物理位置计算出来的,我们得到一个rowid 可以获得该行的所在的物理位置,可以快速
定位该行。我们也可以将指定的数构造出一个rowid,
分解ROWID
SQL> conn scott/tiger
Connected.
SQL> SELECT ENAME,ROWID,
2 DBMS_ROWID.ROWID_OBJECT(ROWID) OBJECT#,
3 DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) FILE#,
4 DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK#,
5 DBMS_ROWID.ROWID_ROW_NUMBER(ROWID) ROW# FROM EMP;
ENAME ROWID OBJECT# FILE# BLOCK# ROW#
---------- ------------------ ---------- ---------- ---------- ----------
SMITH AAANNhAAEAAAAAgAAA 54113 4 32 0
ALLEN AAANNhAAEAAAAAgAAB 54113 4 32 1
WARD AAANNhAAEAAAAAgAAC 54113 4 32 2
JONES AAANNhAAEAAAAAgAAD 54113 4 32 3
MARTIN AAANNhAAEAAAAAgAAE 54113 4 32 4
BLAKE AAANNhAAEAAAAAgAAF 54113 4 32 5
CLARK AAANNhAAEAAAAAgAAG 54113 4 32 6
SCOTT AAANNhAAEAAAAAgAAH 54113 4 32 7
KING AAANNhAAEAAAAAgAAI 54113 4 32 8
TURNER AAANNhAAEAAAAAgAAJ 54113 4 32 9
ADAMS AAANNhAAEAAAAAgAAK 54113 4 32 10
JAMES AAANNhAAEAAAAAgAAL 54113 4 32 11
FORD AAANNhAAEAAAAAgAAM 54113 4 32 12
MILLER AAANNhAAEAAAAAgAAN 54113 4 32 13
构造rowid
SQL> select dbms_rowid.rowid_create(1,54113,4,32,7) from dual;
参数1 代表是新版本的rowid 格式,64 进制的。18 位
DBMS_ROWID.ROWID_CREATE(1,5411
------------------------------------
AAANNhAAEAAAAAgAAH
SQL> select dbms_rowid.rowid_create(0,54113,4,32,7) from dual;
参数0 代表是老版本的rowid 格式,16 进制的。16 位,oracle8 以前的rowid 是以老版本描
述的。
DBMS_ROWID.ROWID_CREATE(0,5411
------------------------------------
00000020.0007.0004
八位的块,四位的行,四位的文件,将20 转为10 进制是32,上面的rowid 代表着4 号文件的,
第32 个块的,第7 行。我们将最大的8 位16 进制转化为十进制。刚好为4m。所以一个数据
文件大小的上限为4m 个oracle 块。
SQL> select to_number('ffffffff','xxxxxxxxxxxxx') from dual;
TO_NUMBER('FFFFFFFF','XXXXXXXX
------------------------------
4294967295
我们通过rowid 可以判断行是如何分布在每个数据块当中的。
SQL> drop table t1 purge;
Table dropped.
SQL> create table t1 as select * from emp;
Table created.
SQL> insert into t1 select * from t1;
14 rows created.
SQL> /
28 rows created.
SQL> /
56 rows created.
SQL> /
112 rows created.
SQL> /
224 rows created.
SQL> commit;
Commit complete.
我们建立了一个400 多行的实验表t1.
SQL> SELECT DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK#,COUNT(*)
2 FROM T1
3 GROUP BY DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID);
BLOCK# COUNT(*)
---------- ----------
95 168
94 42
96 56
93 168
92 14
我们看到最多可以存放168 行,根据每行的行长不同,块中存放的行数也不同,行长就可以存
储少一些,行短就存储多一些。
行是紧密的码放在块中,行头存放锁的信息
验证每个数据块可以存储的最大行数
CONN SCOTT/TIGER
SQL> DROP TABLE T4 PURGE;
Table dropped.
SQL> CREATE TABLE T4 (c varchar2(1)) pctfree 0;
Table created.
SQL> INSERT INTO T4 VALUES(null);
1 row created.
SQL> INSERT INTO T4 SELECT * FROM T4;
1 row created.
SQL> /
2 rows created.
SQL> /
1024 rows created.
SQL> commit;
Commit complete.
--到2000 行,我们建立了一个表t4,该表的每一行都存储的null 值,可以说是最短的行了。
pctfree 0 的含义是每个块都放满数据不留空间。
SELECT DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK#,COUNT(*)
FROM T4 GROUP BY DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID);
BLOCK# COUNT(*)
------ ----------
100 582
104 733
103 733
我们看到每个块即使存储空行,也只能存储733 行。
将数据块存储到平面文件
alter system dump datafile 4 block 32;
show parameter user_dump_dest
·· 自动段管理的描述:位图块和空闲列表对比
当表空间使用手工段管理的时候,段的块管理模式是空闲列表模式。当表空间使用自动段管
理的时候,段的块管理模式是位图块模式。
SQL> select TABLESPACE_NAME,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces
2 order by 2;
TABLESPACE_NAME SEGMENT_SPAC
--------------- ------------
T2M AUTO
TL AUTO
USERS AUTO
BIGTS AUTO
SYSAUX AUTO
TP1 MANUAL
TEMP1 MANUAL
TEMP MANUAL
UNDOTBS1 MANUAL
SYSTEM MANUAL
TEMP2 MANUAL
上半部分为手工段管理模式,下半部分为位图块管理模式,管理的是段内的块。
手工段管理模式是一直存在的模式, 位图块管理模式是9i 的新特性,在10.2 版以后,建立的
表空间默认就是自动段管理。所以我们可以看出,自动段管理有性能的优势。
空闲列表存在于第一个块,我们怎么知道的呢?通过rowid 可以发现,在手工管理的表中,数
据总是从第二个块开始存放。 
当我们使用自动段管理模式的时候,情况又如何呢?我们通过ROWID 可以看到详细的行分布
情况,我们会发现每次数据都是从第四个块开始存放,那么前三个数据块干什么用了呢?是巧
合还是必然。我看了很多个表,都是一样的,没有一个是例外。我们就将数据块转存到dump
文件,仔细研究一下。
ALTER SYSTEM DUMP datafile 4 block 9;
ALTER SYSTEM DUMP datafile 4 block 10;
ALTER SYSTEM DUMP datafile 4 block 11;
4 号文件在默认建立数据库的时候是users 表空间,9 到15 之间的数据块存储的是dept 表。
9 号数据块的部分内容:
Start dump data blocks tsn: 4 file#: 4 minblk 9 maxblk 9
buffer tsn: 4 rdba: 0x01000009 (4/9)
scn: 0x0000.c6682f1c seq: 0x02 flg: 0x04 tail: 0x2f1c2002
frmt: 0x02 chkval: 0xd57e type: 0x20=FIRST LEVEL BITMAP BLOCK
该块为一级位图块。
10 号数据块的部分内容:
Start dump data blocks tsn: 4 file#: 4 minblk 10 maxblk 10
buffer tsn: 4 rdba: 0x0100000a (4/10)
scn: 0x0000.c6682eec seq: 0x02 flg: 0x04 tail: 0x2eec2102
frmt: 0x02 chkval: 0x9528 type: 0x21=SECOND LEVEL BITMAP BLOCK
该块为二级位图块。
11 号数据块的部分内容:
Start dump data blocks tsn: 4 file#: 4 minblk 11 maxblk 11
buffer tsn: 4 rdba: 0x0100000b (4/11)
scn: 0x0000.c6682f1c seq: 0x02 flg: 0x04 tail: 0x2f1c2302
frmt: 0x02 chkval: 0xb88b type: 0x23=PAGETABLE SEGMENT HEADER
Highwater:: 0x01000011 ext#: 0 blk#: 8 ext size: 8
该块为段头块。存储了高水位标记。
SQL> select OWNER,SEGMENT_NAME,SEGMENT_TYPE,HEADER_BLOCK
from dba_segments where SEGMENT_NAME='DEPT';
OWNER SEGMENT_NAME SEGMENT_TYPE HEADER_BLOCK
---------- -------------------- ------------ ------------
SCOTT DEPT TABLE 11
这句话表明段头在11 块上。
SQL> SELECT SEGMENT_NAME,EXTENT_ID,BLOCK_ID,BLOCKS FROM DBA_EXTENTS
where SEGMENT_NAME='DEPT';
SEGMENT_NAME EXTENT_ID BLOCK_ID BLOCKS
-------------------- ---------- ---------- ----------
DEPT 0 9 8
这句话表明这个表存储空间的分布为9 到15 共8 个数据块。
一切都真相大白了。
位图块为什么要分级别,很简单,位图块的使用和索引的原理相同,一定要有根。所有的位图
块是一个树状的结构。这样数据库才会迅速的找到所有的位图块。迅速的分配空间。自动段
的管理高水位既存在于最后一个一级位图块中,又存在于段头中。一级位图块会有很多个,
因为分配空间由位图块决定,所以在位图块中要有高水位的信息。
想验证上面的图形,用到rowid 来定位行,alter system dump datafile ## block ##;来获
得块的信息。
一个位图块最多存储64 个块的信息,每个128 个块的范围的头两个块都是位图块。当然我们
的实验是8k 大小的块,我估计16k 大小的块会存在一些变化,这些都无所谓了。当范围大小
为8 个块的时候,每两个范围使用一个位图块,每个位图块中描述16 个块的信息。
下面显示的是一个二级位图块和两个一级位图块的转存dump 文件。
我们建立一个五万行的大表t1,再删除部分的数据。
SQL> SELECT SEGMENT_NAME,EXTENT_ID,BLOCK_ID,BLOCKS FROM DBA_EXTENTS
2 where SEGMENT_NAME='T1';
SEGMENT_NAME EXTENT_ID BLOCK_ID BLOCKS
-------------------- ---------- ---------- ----------
T1 0 57 8
T1 1 65 8
T1 2 105 8
T1 3 113 8
T1 4 121 8
T1 5 521 8
T1 6 537 8
T1 7 545 8
T1 8 553 8
T1 9 561 8
T1 10 569 8
T1 11 577 8
T1 12 585 8
T1 13 593 8
T1 14 601 8
T1 15 609 8
T1 16 137 128
T1 17 265 128
从范围的分布我们可以看出,58 号块为二级位图块,是所有一级位图块的根。而266 为最后
一个一级位图块,其中含有高水位的标记。其中红颜色的为一级位图块。59 号块为段头。
58 号块
Start dump data blocks tsn: 4 file#: 4 minblk 58 maxblk 58
buffer tsn: 4 rdba: 0x0100003a (4/58)
scn: 0x0000.c66bfc3b seq: 0x01 flg: 0x04 tail: 0xfc3b2101
frmt: 0x02 chkval: 0x95de type: 0x21=SECOND LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x07C62200 to 0x07C64200
7C62200 0000A221 0100003A C66BFC3B 04010000 [!。。。:。。。;。k。。。。。]
7C62210 000095DE 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
7C62220 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 1 times
7C62240 00000000 00000000 00000000 0100003B [。。。。。。。。。。。。;。。。]
7C62250 0000000C 0000000C 00000000 00000000 [。。。。。。。。。。。。。。。。]
7C62260 00000000 00000000 0000D6A2 00000001 [。。。。。。。。。。。。。。。。]
7C62270 00000000 01000039 00010003 01000069 [。。。。9.。。。。。。i。。。]
7C62280 00010003 01000079 00010003 01000219 [。。。。y。。。。。。。。。。。]
7C62290 00010003 01000229 00010003 01000239 [。。。。)。。。。。。。9.。。]
7C622A0 00010003 01000249 00010003 01000259 [。。。。I。。。。。。。Y。。。]
7C622B0 00010003 01000089 00010003 0100008A [。。。。。。。。。。。。。。。。]
7C622C0 00010003 01000109 00010003 0100010A [。。。。。。。。。。。。。。。。]
7C622D0 00010005 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
7C622E0 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 496 times
7C641F0 00000000 00000000 00000000 FC3B2101 [。。。。。。。。。。。。。!;。]
Dump of Second Level Bitmap Block
number: 12 nfree: 12 ffree: 0 pdba: 0x0100003b
Inc #: 0 Objd: 54946
opcode:0
xid:
L1 Ranges :
--------------------------------------------------------
0x01000039 Free: 3 Inst: 1 注释:转化为十进制为57
0x01000069 Free: 3 Inst: 1 注释:转化为十进制为105
0x01000079 Free: 1 Inst: 1 注释:转化为十进制为121
0x01000219 Free: 1 Inst: 1 注释:转化为十进制为537
0x01000229 Free: 1 Inst: 1 注释:转化为十进制为553
0x01000239 Free: 3 Inst: 1 注释:转化为十进制为569
0x01000249 Free: 3 Inst: 1 注释:转化为十进制为585
0x01000259 Free: 3 Inst: 1 注释:转化为十进制为601
0x01000089 Free: 3 Inst: 1 注释:转化为十进制为137
0x0100008a Free: 3 Inst: 1 注释:转化为十进制为138
0x01000109 Free: 3 Inst: 1 注释:转化为十进制为265
0x0100010a Free: 5 Inst: 1 注释:转化为十进制为266
我们这里可以看出总共有12 个一级位图块。这是所有位图块的根块。
其中位图块的分布正好和我们推理的一致。
其中free 1 代表有0%的空间可以使用
,free 2 代表有0%-25%的空间可以使用,
,free 3 代表有25%-50%的空间可以使用,
,free 4 代表有50%-75%的空间可以使用,
free 5 代表有100%的空间可以使用。
--------------------------------------------------------
End dump data blocks tsn: 4 file#: 4 minblk 58 maxblk 58
***************************************************************************
265 号块
Start dump data blocks tsn: 4 file#: 4 minblk 265 maxblk 265
buffer tsn: 4 rdba: 0x01000109 (4/265)
scn: 0x0000.c66bfc7b seq: 0x01 flg: 0x04 tail: 0xfc7b2001
frmt: 0x02 chkval: 0x97c1 type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x07C62200 to 0x07C64200
7C62200 0000A220 01000109 C66BFC7B 04010000 [ 。。。。。。。{。k。。。。。]
7C62210 000097C1 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
7C62220 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 1 times
7C62240 00000000 00000000 00000000 00000004 [。。。。。。。。。。。。。。。。]
7C62250 FFFFFFFF 00000000 00000002 00000040 [。。。。。。。。。。。。@。。。]
7C62260 00010001 00000000 0000003E 00000000 [。。。。。。。。>。。。。。。。]
7C62270 00000000 00000002 4725C48F 4725C48F [。。。。。。。。。。%G。。%G]
7C62280 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
7C62290 0100003A 0000000A 00000000 00000000 [:。。。。。。。。。。。。。。。]
7C622A0 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 1 times
7C622C0 0000D6A2 00000000 00000000 01000109 [。。。。。。。。。。。。。。。。]
7C622D0 00000040 00000000 00000000 00000000 [@。。。。。。。。。。。。。。。]
7C622E0 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 9 times
7C62380 00000000 00000000 00000000 33333311 [。。。。。。。。。。。。。333]
7C62390 33333333 33333333 33333333 33333333 [3333333333333333]
7C623A0 33333333 33333333 33333333 00000000 [333333333333.。。。]
7C623B0 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 483 times
7C641F0 00000000 00000000 00000000 FC7B2001 [。。。。。。。。。。。。。 {。]
Dump of First Level Bitmap Block
--------------------------------
nbits : 4 nranges: 1 parent dba: 0x0100003a poffset: 10
unformatted: 0 total: 64 first useful block: 2
owning instance : 1
instance ownership changed at 10/29/2007 19:31:27
Last successful Search 10/29/2007 19:31:27
Freeness Status: nf1 0 nf2 62 nf3 0 nf4 0
Extent Map Block Offset: 4294967295
First free datablock : 2
Bitmap block lock opcode 0
Locker xid: : 0x0000.000.00000000
Inc #: 0 Objd: 54946
--------------------------------------------------------
DBA Ranges :
--------------------------------------------------------
0x01000109 Length: 64 Offset: 0
0:Metadata 1:Metadata 2:25-50% free 3:25-50% free
4:25-50% free 5:25-50% free 6:25-50% free 7:25-50% free
8:25-50% free 9:25-50% free 10:25-50% free 11:25-50% free
12:25-50% free 13:25-50% free 14:25-50% free 15:25-50% free
16:25-50% free 17:25-50% free 18:25-50% free 19:25-50% free
20:25-50% free 21:25-50% free 22:25-50% free 23:25-50% free
24:25-50% free 25:25-50% free 26:25-50% free 27:25-50% free
28:25-50% free 29:25-50% free 30:25-50% free 31:25-50% free
32:25-50% free 33:25-50% free 34:25-50% free 35:25-50% free
36:25-50% free 37:25-50% free 38:25-50% free 39:25-50% free
40:25-50% free 41:25-50% free 42:25-50% free 43:25-50% free
44:25-50% free 45:25-50% free 46:25-50% free 47:25-50% free
48:25-50% free 49:25-50% free 50:25-50% free 51:25-50% free
52:25-50% free 53:25-50% free 54:25-50% free 55:25-50% free
56:25-50% free 57:25-50% free 58:25-50% free 59:25-50% free
60:25-50% free 61:25-50% free 62:25-50% free 63:25-50% free
--------------------------------------------------------
End dump data blocks tsn: 4 file#: 4 minblk 265 maxblk 265
************************************************************************
266 号块,最后一个一级位图块
Start dump data blocks tsn: 4 file#: 4 minblk 266 maxblk 266
buffer tsn: 4 rdba: 0x0100010a (4/266)
scn: 0x0000.c66bfc9f seq: 0x01 flg: 0x04 tail: 0xfc9f2001
frmt: 0x02 chkval: 0xf65b type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x07C62200 to 0x07C64200
7C62200 0000A220 0100010A C66BFC9F 04010000 [ 。。。。。。。。。k。。。。。]
7C62210 0000F65B 00000000 00000000 00000000 [[。。。。。。。。。。。。。。。]
7C62220 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 1 times
7C62240 00000000 00000000 00000000 00000004 [。。。。。。。。。。。。。。。。]
7C62250 FFFFFFFF 00000000 00000000 00000040 [。。。。。。。。。。。。@。。。]
7C62260 00010001 00000000 00000023 00000000 [。。。。。。。。#。。。。。。。]
7C62270 0000001D 00000000 4725C48F 4725C48F [。。。。。。。。。。%G。。%G]
7C62280 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
7C62290 0100003A 0000000B 00000011 00000080 [:。。。。。。。。。。。。。。。]
7C622A0 00000080 01000189 00000000 00000011 [。。。。。。。。。。。。。。。。]
7C622B0 00000000 00000172 00000000 00000001 [。。。。r。。。。。。。。。。。]
7C622C0 0000D6A2 00000000 00000000 01000149 [。。。。。。。。。。。。I。。。]
7C622D0 00000040 00000000 00000000 00000000 [@。。。。。。。。。。。。。。。]
7C622E0 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 9 times
7C62380 00000000 00000000 00000000 53355335 [。。。。。。。。。。。。5S5S]
7C62390 33355335 33353335 33553355 33553355 [5S535353U3U3U3U3]
7C623A0 33553355 33553355 33553355 00000000 [U3U3U3U3U3U3.。。。]
7C623B0 00000000 00000000 00000000 00000000 [。。。。。。。。。。。。。。。。]
Repeat 483 times
7C641F0 00000000 00000000 00000000 FC9F2001 [。。。。。。。。。。。。。 。。]
Dump of First Level Bitmap Block
--------------------------------
nbits : 4 nranges: 1 parent dba: 0x0100003a poffset: 11
unformatted: 0 total: 64 first useful block: 0
owning instance : 1
instance ownership changed at 10/29/2007 19:31:27
Last successful Search 10/29/2007 19:31:27
Freeness Status: nf1 0 nf2 35 nf3 0 nf4 29
Extent Map Block Offset: 4294967295
First free datablock : 0
Bitmap block lock opcode 0
Locker xid: : 0x0000.000.00000000
Inc #: 0 Objd: 54946
HWM Flag: HWM Set
Highwater:: 0x01000189 ext#: 17 blk#: 128 ext size: 128
#blocks in seg。 hdr's freelists: 0
#blocks below: 370
mapblk 0x00000000 offset: 17
--------------------------------------------------------
DBA Ranges :
--------------------------------------------------------
0x01000149 Length: 64 Offset: 0
0:full 1:75-100% free 2:75-100% free 3:25-50% free
4:25-50% free 5:75-100% free 6:75-100% free 7:25-50% free
8:25-50% free 9:50-75% free 10:75-100% free 11:25-50% free
12:25-50% free 13:75-100% free 14:25-50% free 15:0-25% free
16:25-50% free 17:75-100% free 18:25-50% free 19:25-50% free
20:25-50% free 21:75-100% free 22:25-50% free 23:25-50% free
24:75-100% free 25:75-100% free 26:25-50% free 27:25-50% free
28:75-100% free 29:75-100% free 30:25-50% free 31:25-50% free
32:75-100% free 33:75-100% free 34:25-50% free 35:25-50% free
36:75-100% free 37:75-100% free 38:25-50% free 39:25-50% free
40:75-100% free 41:75-100% free 42:25-50% free 43:25-50% free
44:75-100% free 45:75-100% free 46:25-50% free 47:25-50% free
48:75-100% free 49:75-100% free 50:25-50% free 51:25-50% free
52:75-100% free 53:75-100% free 54:25-50% free 55:25-50% free
56:75-100% free 57:75-100% free 58:25-50% free 59:25-50% free
60:75-100% free 61:75-100% free 62:25-50% free 63:25-50% free
--------------------------------------------------------
End dump data blocks tsn: 4 file#: 4 minblk 266 maxblk 266
当数据块被插入满数据以后,只有下降到25%-50%可以使用的时候,才变位图块,当我们看到
块全为full 的时候,我们删除数据,每删20 行dump 一下一级位图块。我们就会看到各种标
记的空闲块。
·· 手工管理段的数据块的参数配置:pctfree,pctused,freelist
SQL> select TABLESPACE_NAME,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces
order by 2;
TABLESPACE_NAME SEGMENT_SPAC
--------------- ------------
BIGTS AUTO
DDD AUTO
DDC AUTO
LB AUTO
T2M AUTO
TL AUTO
SYSAUX AUTO
USERS AUTO
D10 AUTO
D20 AUTO
GG AUTO
TT MANUAL
TEMP2 MANUAL
TEMP MANUAL
TP1 MANUAL
UNDOTBS1 MANUAL
SYSTEM MANUAL
在数据库10.2 版本以前,我们建立的表空间默认都是手工管理的,在10.2 版本以后默认都
是自动管理的,管理指的如何管理表内的块。
我们在system 表空间建立一张表。因为是实验,我们一般不要在system 表空间建立表,但
当你安装完数据库以后肯定会有这个表空间,而且是手工管理段内的块,所以我为了学员们
学习方便,就建立在system 表空间了。
SQL> CONN SCOTT/TIGER
Connected.
SQL> DROP TABLE T1 PURGE;
Table dropped.
SQL> CREATE TABLE T1 TABLESPACE system AS SELECT * FROM EMP WHERE 0=9;
Table created.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select
PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
10 40 0 0 7 0
0
SQL> SELECT EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS FROM DBA_EXTENTS
2 WHERE OWNER='SCOTT' AND SEGMENT_NAME='T1';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 1 62753 8
 
SQL> insert into t1 select * from emp;
14 rows created.
SQL> commit;
Commit complete.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
10 40 14 1 6 7476 1
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# ,COUNT(*)
FROM T1 GROUP BY dbms_rowid.ROWID_BLOCK_NUMBER(rowid);
BLOCK# COUNT(*)
---------- ----------
62754 14
 
SQL> insert into t1 select * from t1;
14 rows created.
SQL> /
28 rows created.
SQL> /
56 rows created.
SQL> /
112 rows created.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
10 40 224 2 5 3262 1
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# ,COUNT(*)
FROM T1 GROUP BY dbms_rowid.ROWID_BLOCK_NUMBER(rowid);
BLOCK# COUNT(*)
---------- ----------
62754 169
62755 55
 
SQL> insert into t1 select * from t1;
224 rows created.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
10 40 448 3 4 1657 1
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# ,COUNT(*)
FROM T1 GROUP BY dbms_rowid.ROWID_BLOCK_NUMBER(rowid);
BLOCK# COUNT(*)
---------- ----------
62756 111
62754 169
62755 168
 
SQL> insert into t1 select * from t1;
448 rows created.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
10 40 896 7 0 2575 2
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# ,COUNT(*)
FROM T1 GROUP BY dbms_rowid.ROWID_BLOCK_NUMBER(rowid);
BLOCK# COUNT(*)
---------- ----------
62756 168
62757 168
62758 168
62759 55
62754 169
62755 168
 
SQL> delete t1 where rownum<131;
130 rows deleted.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
10 40 766 7 0 3336 3
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# ,COUNT(*)
FROM T1 GROUP BY dbms_rowid.ROWID_BLOCK_NUMBER(rowid);
BLOCK# COUNT(*)
---------- ----------
62756 168
62757 168
62758 168
62759 55
62754 39
62755 168
 
SQL> delete t1 where deptno=30;
328 rows deleted.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
10 40 438 7 0 5327 3
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# ,COUNT(*)
FROM T1 GROUP BY dbms_rowid.ROWID_BLOCK_NUMBER(rowid);
BLOCK# COUNT(*)
---------- ----------
62756 96
62757 96
62758 96
62759 31
62754 23
62755 96
SQL> delete t1 where dbms_rowid.ROWID_BLOCK_NUMBER(rowid)=62758;
96 rows deleted.
SQL> commit;
Commit complete.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
10 40 342 7 0 5874 4
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# ,COUNT(*)
FROM T1 GROUP BY dbms_rowid.ROWID_BLOCK_NUMBER(rowid);
BLOCK# COUNT(*)
---------- ----------
62756 96
62757 96
62759 31
62754 23
62755 96
 
SQL> alter table t1 pctfree 0;
Table altered.
SQL> insert into t1 select * from t1 where rownum<190;
189 rows created.
SQL> analyze table t1 compute statistics;
Table analyzed.
SQL> select PCT_FREE,PCT_USED,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,NUM_FREELIST_BLOCKS
from tabs where table_name='T1';
PCT_FREE PCT_USED NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE NUM_FREELIST_BLOCKS
---------- ---------- ---------- ---------- ------------ ---------- -------------------
0 40 531 7 0 4750 3
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# ,COUNT(*)
FROM T1 GROUP BY dbms_rowid.ROWID_BLOCK_NUMBER(rowid);
BLOCK# COUNT(*)
---------- ----------
62756 96
62757 96
62759 192
62760 28
62754 23
62755 96

 
tag标签:
------分隔线----------------------------
------分隔线----------------------------