+ -
当前位置:首页 → 问答吧 → 疑问---表空间块的管理方式到底如何决定???

疑问---表空间块的管理方式到底如何决定???

时间:2011-09-16

来源:互联网

本人在学习oralce存储管理时,对块的管理方式还比较模糊

create tablespace USERTBS
 datafile 'd:\oradata\usertbs01.dbf' size 50m
pctfree30 pctused50
extent management local autoallocate;
segment space management auto;

上述创建表空间的语句  
问题1. segment space management auto如果没有显示指定的话,默认是auto自动吗???如果是自动的话,既是oracle通过位图来管理段中的数据块,这时上面的PCTFREE PCTUSED参数是否会被忽略??? 在此表空间中创建表等对象时使用的PCTFREE PCTUSED参数是否会被忽略???

问题2. 如果创建表空间时把段管理设为手动(不知道是不是segment space management manual),块的管理方式又是怎么样的??? 在此表空间中创建表等对象时再使用的PCTFREE20 PCTUSED60参数,和pctfree30 pctused50不一致的话 那块的管理又是怎样???

谢谢~~~

作者: xieyihn   发布时间: 2011-09-16

自己顶起来

作者: xieyihn   发布时间: 2011-09-16

好象没注意过这个问题,一般是设置一个值,10%增长,如果觉得不够了,可以加大.

作者: dawugui   发布时间: 2011-09-16

引用 2 楼 dawugui 的回复:
好象没注意过这个问题,一般是设置一个值,10%增长,如果觉得不够了,可以加大.

SQL> create tablespace indx
  2 datafile 'C:\oracle\oradata\testdb\indx.dbf' size 10M autoextend ON next 1M maxsize 50
  3 extent management local autoallocate
  4 pctfree 30
  5 pctused 60;
pctfree 30
*
ERROR 位于第 4 行:
ORA-02180: 无效的 CREATE TABLESPACE 选项

建表空间时PCTFREE,PCTUSED到底怎样使用 为什么加上后上述语句报错呢?

作者: xieyihn   发布时间: 2011-09-16

create tablespace USERTBS
 datafile 'd:\oradata\usertbs01.dbf' size 50m
pctfree30 pctused50
extent management local autoallocate;
segment space management auto;

上述创建表空间的语句  
问题1. segment space management auto如果没有显示指定的话,默认是auto自动吗???如果是自动的话,既是oracle通过位图来管理段中的数据块,这时上面的PCTFREE PCTUSED参数是否会被忽略??? 在此表空间中创建表等对象时使用的PCTFREE PCTUSED参数是否会被忽略???

问题2. 如果创建表空间时把段管理设为手动(不知道是不是segment space management manual),块的管理方式又是怎么样的??? 在此表空间中创建表等对象时再使用的PCTFREE20 PCTUSED60参数,和pctfree30 pctused50不一致的话 那块的管理又是怎样???

记得好像从oracle9i 开始就采用自动管理方式,如果不指定,系统也是采取auto的方式进行管理,当自动管理后其他的参数自然会被忽略了.

下面是自己记录的笔记看是否对你能有所收获:
表空间管理方式可分为

  字典管理(dictionary-managed tablespace DMT)
  字典管理方式是传统的管理方式,使用oracle的数据字典来管理存储空间的分配。
当在表空间中分配新的区或回收已分配的区时Oracle将对数据字典中相关的“基层表”进行查询,更新并且在这一过程中使用单线程搜索方法,
速度比较慢,另外对表的操作会产生redo和undo。
因此在分配或回收区时,会在数据库中产生相应的undo和redo信息,这是字典管理方式的特点,也是他的缺点。

注意:
  如果其他表空间要使用数据字典管理方式,那么system表空间也必须采用字典管理方式,
而且在create tablespace 语句中显示的使用 EXTENT MANAGEMENT DICTIONARY;

本地管理(local_managed tablespace LMT)--推荐使用本地管理!

  本地管理表空间方式是从oracle9i开始改进新的管理方式,创建表空间时默认是使用本地管理表空间方式。
在本地管理方式下,表空间中区的分配与回收的管理信息存储在表空间的数据文件中,而与数据字典无关。表空间
会在每一个数据文件中维护一个“位图-bitmap”结构,用于记录表空间中所有区的分配情况,当在表空间中分配新的区
或者回收已分配的区时oracle将对数据文件中的“位图”进行更新,这种更新不是对表的更新,所以不会产生redo和undo信息。

为什么设置 extent management local 后就不存在磁盘浪费一说呢?因为本地管理是维护数据文件的位图信息,它会使用位图的方法去查询空闲空间,相邻的空闲块被视为
一个大的空闲块,从设计上保证自动合并磁盘碎片,碎片产生后由系统自动消除!

作者: BearFishShow   发布时间: 2011-09-17

热门下载

更多