您当前的位置: 首页 > 数据库教程 > Oracle教程 > ORACLE空间管理实验2:区的管理与分配

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

作者:不详 来源:网络 发布时间: 2014-08-24 19:49 点击:
内容基于LMT管理的表空间,字典管理已经不用了。 本篇主要验证了这些问题: 1.LMT管理的表空间,区的分配有两种方法: 系统分配和UNIFORM固定大小--见实验 2.验证Oracle找寻可用区的方式: 从数据文件开头的位图块中获得可用区的信息,DUMP时可见FIRST:3这种,表示已经

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

  内容基于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个数据文件

  将会平均分配到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空间管理实验2:区的管理与分配"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 广告合作 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4