首页 > 代码库 > 11g参数之deferred_segment_creation

11g参数之deferred_segment_creation

deferred_segment_creation   

布尔型

默认值为true

这个参数10gR2中是没有的,11g中才有

从字面意思也可以看出来,当这个参数设置为true时,当创建一个表的时候,不给它分配segment,即不分配空间,当向这个表中插入第一条数据的时候才开始分配segment。

设置为true的优点:在创建一系列表的时候,若事先已知许多表并没有数据,可以指定这个参数为true。这样可以节省空间,也可以增加建表速度。

缺点:使用exp导出的时候,不会导出没有segment分配的表。使用expdp可以导出空表。

查看该参数当前设置可以使用

show parameter deferred_segment_creation

这个参数可以动态修改,使用

alter system/session set deferred_segment_creation=true/false;

更改后,之前延迟分配segment的表并不会受到影响,仍然为空表。

查询某schema中所有未分配segment的表可以使用以下语句

select *
  from user_tables 
 where segment_created = 'NO'
若想为这些未分配segment的表分配空间,可以使用语句

select 'alter table ' || table_name || ' allocate extent;'
  from user_tables
 where segment_created = 'NO'

为所有空表分配segment,之后就可以进行exp导出了。

如果表插入数据后被truncate,则会保留segment。


11g参数之deferred_segment_creation