ORACLE空间管理实验2:区的管理与分配
2014-01-27 21:49
501 查看
内容基于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
而一个普通堆表是一个段,一个段最少包含一个区,一个区最少包含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
####################################################################
BYS@ bys3>select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST2';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
------------------------------ ---------- ---------------------------------------- ------------
TEST2 7 /u01/oradata/bys3/test2.dbf 9.8828125
TEST2 8 /u01/oradata/bys3/test2_2.dbf 9.921875
TEST2 9 /u01/oradata/bys3/test2_3.dbf 9.921875
TEST2 10 /u01/oradata/bys3/test2_4.dbf 9.921875
BYS@ bys3>drop table test16 purge;
Table dropped.
BYS@ bys3>drop table test17 purge;
Table dropped.
BYS@ bys3>create table test17(aa int) tablespace test2 storage (initial 20m);
Table created.
BYS@ bys3>insert into test17 values(888);
1 row created.
BYS@ bys3>commit;
Commit complete.
col file_name for a30
col tablespace_name for a15
select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST2';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
------------------------------ ---------- ---------------------------------------- ------------
TEST2 7 /u01/oradata/bys3/test2.dbf 4.921875
TEST2 8 /u01/oradata/bys3/test2_2.dbf 4.921875
TEST2 9 /u01/oradata/bys3/test2_3.dbf 4.921875
TEST2 10 /u01/oradata/bys3/test2_4.dbf 4.921875
一直到两个9M的数据文件空间用完,再分配时,则从剩余的一个数据文件中分配。见实验:
BYS@ bys3>select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST3';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
--------------- ---------- ------------------------------ ------------
TEST3 11 /u01/oradata/bys3/test3_1.dbf 9
TEST3 12 /u01/oradata/bys3/test3_2.dbf 19
TEST3 13 /u01/oradata/bys3/test3_3.dbf 9
BYS@ bys3>insert into test1 values(789999);
1 row created.
BYS@ bys3>commit;
Commit complete.
BYS@ bys3>select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST3';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
--------------- ---------- ------------------------------ ------------
TEST3 11 /u01/oradata/bys3/test3_1.dbf 1
TEST3 12 /u01/oradata/bys3/test3_2.dbf 11
TEST3 13 /u01/oradata/bys3/test3_3.dbf 1
BYS@ bys3>create table test2(aa int) tablespace test3 storage (initial 5m);
Table created.
BYS@ bys3>insert into test2 values(789999);
1 row created.
BYS@ bys3>commit;
Commit complete.
BYS@ bys3>select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST3';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
--------------- ---------- ------------------------------ ------------
TEST3 12 /u01/oradata/bys3/test3_2.dbf 8
本篇主要验证了这些问题:
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个数据文件
将会平均分配到10个数据文件中。下面我建一个表空间包含四个数据文件,建一个表,初始化大小为20M,将平均分配到这4个数据文件中。BYS@ bys3>select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST2';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
------------------------------ ---------- ---------------------------------------- ------------
TEST2 7 /u01/oradata/bys3/test2.dbf 9.8828125
TEST2 8 /u01/oradata/bys3/test2_2.dbf 9.921875
TEST2 9 /u01/oradata/bys3/test2_3.dbf 9.921875
TEST2 10 /u01/oradata/bys3/test2_4.dbf 9.921875
BYS@ bys3>drop table test16 purge;
Table dropped.
BYS@ bys3>drop table test17 purge;
Table dropped.
BYS@ bys3>create table test17(aa int) tablespace test2 storage (initial 20m);
Table created.
BYS@ bys3>insert into test17 values(888);
1 row created.
BYS@ bys3>commit;
Commit complete.
col file_name for a30
col tablespace_name for a15
select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST2';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
------------------------------ ---------- ---------------------------------------- ------------
TEST2 7 /u01/oradata/bys3/test2.dbf 4.921875
TEST2 8 /u01/oradata/bys3/test2_2.dbf 4.921875
TEST2 9 /u01/oradata/bys3/test2_3.dbf 4.921875
TEST2 10 /u01/oradata/bys3/test2_4.dbf 4.921875
实验四:一个包含多个大小不一数据文件的表空间,各个数据文件的剩余空间一样多吗?为什么
实验使用中应该保持数据文件大小一致。如表空间有三个数据文件,大小分别是9M,19M,9M,在分配3M的空间时,会在每个数据文件中各分配1M。一直到两个9M的数据文件空间用完,再分配时,则从剩余的一个数据文件中分配。见实验:
BYS@ bys3>select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST3';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
--------------- ---------- ------------------------------ ------------
TEST3 11 /u01/oradata/bys3/test3_1.dbf 9
TEST3 12 /u01/oradata/bys3/test3_2.dbf 19
TEST3 13 /u01/oradata/bys3/test3_3.dbf 9
BYS@ bys3>insert into test1 values(789999);
1 row created.
BYS@ bys3>commit;
Commit complete.
BYS@ bys3>select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST3';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
--------------- ---------- ------------------------------ ------------
TEST3 11 /u01/oradata/bys3/test3_1.dbf 1
TEST3 12 /u01/oradata/bys3/test3_2.dbf 11
TEST3 13 /u01/oradata/bys3/test3_3.dbf 1
BYS@ bys3>create table test2(aa int) tablespace test3 storage (initial 5m);
Table created.
BYS@ bys3>insert into test2 values(789999);
1 row created.
BYS@ bys3>commit;
Commit complete.
BYS@ bys3>select a.tablespace_name,a.file_id,b.file_name,a.bytes/1024/1024 file_byte_mb from dba_free_space a,dba_data_files b where a.file_id=b.file_id and a.tablespace_name='TEST3';
TABLESPACE_NAME FILE_ID FILE_NAME FILE_BYTE_MB
--------------- ---------- ------------------------------ ------------
TEST3 12 /u01/oradata/bys3/test3_2.dbf 8
相关文章推荐
- ORACLE空间管理实验3:区管理之大区小区对I/O性能的影响
- ORACLE空间管理实验4:块管理之ASSM三级位图结构
- ORACLE空间管理实验5:块管理之ASSM下高水位的影响--删除和查询
- ORACLE空间管理实验6:块管理之ASSM下插入操作--高水位的影响及大并发插入的性能问题
- ORACLE空间管理实验7:块管理之MMSM--为什么SYSTEM/UNDO/TEMP是MMSM管理?
- ORACLE空间管理实验8:数据块格式分析--DUMP结合BBED
- [转自OCM白大师]ORACLE空间管理实验8:数据块格式分析--DUMP结合BBED
- ORACLE空间管理实验1:探索LMT表空间管理下数据文件头的结构及位图中区的记录方式
- Oracle级联删除,删除用户的同时,将所分配到的表空间同时删除
- oracle 11g 学习笔记 10_31_管理表空间和数据文件
- Oracle 创建用户,分配空间,用户授权
- oracle数据库管理---- 管理表空间和数据文件
- Oracle教程之管理UNDO(十)--Oracle管理UNDO表空间
- oracle 表空间的管理
- [置顶] [实验-视频过程]oracle热备份-单个表空间-备份和恢复操作演示
- oracle-dba-UNDO表空间管理
- 实验四 主存空间的分配和回收模拟
- Oracle复习之12章--用户管理与权限分配
- ISA Server 2006实验之:分配管理角色
- 实验四、主存空间的分配和回收