本人在学习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不一致的话 那块的管理又是怎样???谢谢~~~

解决方案 »

  1.   

    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到底怎样使用  为什么加上后上述语句报错呢?
      

  2.   

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