您好,欢迎访问一九零五行业门户网

ORACLE空间管理实验2:区的管理与分配

内容基于lmt管理的表空间,字典管理已经不用了。 本篇主要验证了这些问题: 1.lmt管理的表空间,区的分配有两种方法: 系统分配和uniform固定大小--见实验 2.验证oracle找寻可用区的方式: 从数据文件开头的位图块中获得可用区的信息,dump时可见first:3这种
内容基于lmt管理的表空间,字典管理已经不用了。
本篇主要验证了这些问题:1.lmt管理的表空间,区的分配有两种方法:
系统分配和uniform固定大小-->见实验
2.验证oracle找寻可用区的方式:
从数据文件开头的位图块中获得可用区的信息,dump时可见first:3这种,表示已经使用3个区。详见:点击打开链接
3.在表空间中建第一个表(注意,第一个),这个表从数据文件的第几个块开始使用
11g下,lmt管理的表空间,数据文件中0-127号块做位图区域用,第128个块才开始存放表的数据。详见:
4.最小的表-最小的区多大?
5个block,如果block大小是8k,则最小的表是40k。--见下面实验
5.表空间中多个数据文件如何分配空间?
多个数据文件上平均分配--见下面实验
#####################################################################
实验一:系统管理区大小和统一区大小的区别是什么,如何验证这个区别?系统管理区大小由系统自动分配扩展的区大小,
在段的前1m空间:区大小8个块=64k,前16个区是这样。
在段1m---64m之间:区大小1m,128个块
在段64m之后,区大小8m。
可以在系统管理区的表空间内创建表,,然后手动分配1个extent,然后依次扩展960k空间,1m空间,62m空间,然后再扩展一个extent的方式来测试。alter table a1 allocate extent (size 1m);
统一区大小则由创建表空间时uniform size 40k;子句指定.
可以先创建两个不同管理方式的表空间,再分别在此两个表空间创建两个表,手动扩展区,再通过dba_segments来查看。
bys@ bys3>select tablespace_name,block_size,initial_extent,next_extent,extent_management,allocation
_type,segment_space_management from dba_tablespaces where tablespace_name like 'test_';
tablespace_name block_size initial_extent next_extent extent_man allocatio segmen
--------------- ---------- -------------- ----------- ---------- --------- ------
test1 8192 65536 local system auto
test2 8192 40960 40960 local uniform auto
test3 8192 65536 local system auto
bys@ bys3>select * from cat;
table_name table_type
------------------------------ -----------
dept table
bys@ bys3>create table test1(aa int) tablespace test1;
table created.
bys@ bys3>create table test2(aa int) tablespace test2;
table created.
bys@ bys3>insert into test1 values(789);
bys@ bys3>insert into test2 values(789);
bys@ bys3>commit;
commit complete.
bys@ bys3>select segment_name,tablespace_name,bytes,blocks,extents,initial_extent,next_extent from dba_segments where owner='bys' and segment_name like 'test_';
segment_name tablespace_name bytes blocks extents initial_extent next_extent
--------------- --------------- ---------- ---------- ---------- -------------- -----------
test1 test1 65536 8 1 65536 1048576
test2 test2 40960 5 1 40960 40960
bys@ bys3>alter table test1 allocate extent;
table altered.
bys@ bys3>alter table test2 allocate extent;
table altered.
bys@ bys3>select segment_name,tablespace_name,bytes,blocks,extents,initial_extent,next_extent from dba_segments where owner='bys' and segment_name like 'test_';
segment_name tablespace_name bytes blocks extents initial_extent next_extent
--------------- --------------- ---------- ---------- ---------- -------------- -----------
test1 test1 131072 16 2 65536 1048576
test2 test2 81920 10 2 40960 40960
bys@ bys3>alter table test2 allocate extent (size 2m); --2m,系统自动扩展区,此时一个区大小是1m,所以此语句扩展两个区,此时4个区
table altered.
bys@ bys3>alter table test1 allocate extent (size 2m);-uniform size 40k,2048/40=51.2,分配51个区--四舍五入。此时是54个区。
table altered.
bys@ bys3>select segment_name,tablespace_name,bytes,blocks,extents,initial_extent,next_extent from dba_segments where owner='bys' and segment_name like 'test_';
segment_name tablespace_name bytes blocks extents initial_extent next_extent
--------------- --------------- ---------- ---------- ---------- -------------- -----------
test1 test1 2228224 272 4 65536 1048576
test2 test2 2170880 265 53 40960 40960
bys@ bys3>alter table test2 allocate extent (size 110k); --这里的分配区间好像用的四舍五入,比如这里的110k/40k=2.75,分配了三个区
table altered.
bys@ bys3>select segment_name,tablespace_name,bytes,blocks,extents,initial_extent,next_extent from dba_segments where owner='bys' and segment_name like 'test_';
segment_name tablespace_name bytes blocks extents initial_extent next_extent
--------------- --------------- ---------- ---------- ---------- -------------- -----------
test1 test1 2228224 272 4 65536 1048576
test2 test2 2293760 280 56 40960 40960
实验二:一个表至少多大?在assm下,一个区最少5个块。
而一个普通堆表是一个段,一个段最少包含一个区,一个区最少包含5个块,所以当表空间block是8k时,表至少40k。
实验如下:
bys@ bys3>create tablespace test2 datafile '/u01/oradata/bys3/test2.dbf' size 10m uniform size 32k;
create tablespace test2 datafile '/u01/oradata/bys3/test2.dbf' size 10m uniform size 32k
*
error at line 1:
ora-03249: uniform size for auto segment space managed tablespace should have atleast 5 blocks
这一句报错信息可以看到,一个区需要至少5个数据块。
bys@ bys3>create tablespace test2 datafile '/u01/oradata/bys3/test2.dbf' size 10m uniform size 40k;
tablespace created.
bys@ bys3>create table test16(bb int) tablespace test2 storage (initial 1k maxextents 1);
table created.
bys@ bys3>insert into test16 values(999);
1 row created.
bys@ bys3>commit;
commit complete.
bys@ bys3>select a.segment_name,a.bytes/1024 segment_byte,a.tablespace_name,b.initial_extent,b.block_size,b.allocation_type from dba_segments a,dba_tablespaces b where a.owner='bys' and a.segment_name like 'test1_' and a.tablespace_name=b.tablespace_name;
segment_na segment_byte tablespace_name initial_extent block_size allocatio
---------- ------------ ------------------------------ -------------- ---------- ---------
test15 64 users 65536 8192 system
test16 40 test2 40960 8192 uniform
####################################################################
实验三:一个表空间有10个数据文件,在此表空间中创建一个大小100m的表,表的空间将如何分配到10个数据文件
其它类似信息

推荐信息