我在oracle9i中建表时用了storage参数,如下:
create table AA
(
  A1   VARCHAR2(8) not null,
  A2     VARCHAR2(20),
  A3       VARCHAR2(20),
  A4 VARCHAR2(50)
)
tablespace ASPACE
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 20M
    minextents 1
    maxextents unlimited
  );
可是,建好后查看user_extents表,发现初始的20M被自动打散成了每个1M左右的segment,extent_id到了19,请问这是怎么回事?storage不起作用了吗?这样对数据库的性能有影响吗?

解决方案 »

  1.   

    这是正常的,在9i中,默认的tablespace的区管理为Local方式的(可以查dba_tablespaces的extent_management字段得知),而不是以前8i中dictionary方式的,这样做的好处是减少了extent分配时的系统开销,当tablespace为local管理方式时,将忽略建在其上的段的storage选项
      

  2.   

    有别的管理方式可用吗?这个数据库是用于生产的,我怕extent太多了会影响性能。
      

  3.   

    不会影响性能的,相反,这是Oracle的一个进步,以前,每分配一个extent时,将导致对数据字典的更新,改成现在的Local管理模式后,将只在自己的段头中用bit来表示相应的extent是否被分配了,而不再向数据字典谢管理信息了,这种方式效率很高。因此,你不必担心效率问题,no problem。