也可以在create table的子句 segment creation immediate/deferred来指定.
segment creation deferred:直到插入第一条数据的时候,才会创建table segment,lob列,建表时隐式创建的索引段。存储属性会遵从create table中规定的,显示创建的索引,则根据create index语句指定的存储属性。无论首次插入是提交了还是回滚了,都不影响这些段的创建。
注意:当创建很多延迟段分配的表之后,需要保证足够的空间来完成首次插入时段空间的分配。
segment creation immediate:建表的时候就创建段。
如果应用程序依赖dba_segnemts,user_segments,all_segments这三个字典视图的时候,需要使用立即分配。因为当给对象分配段之前,对象是不会出现在这三个视图里的。
segment creation deferred/immediate子句会忽略deferred_segment_creation系统参数设定的值。
查看对象的段是否创建,可以查询user_tables,user_indexes,user_lobs视图的segment_created字段。
SQL> show parameter deferred_segment_creation;
NAME TYPE VALUE
-------------------
deferred_segment_creation boolean TRUE
限制:
1.以下类型的表不能使用段延迟分配:索引组织表、聚簇表、全局临时表、会话中的临时表、内部表、typed tables、AQ tables、外部表,SYS/SYSTEM/PUBLIC/OUTLN/XDB用户的表。
2.11.2.0.2版本之后分区表、子分区也支持段延迟分配
- bitmap join indexes and domain indexes不支持 段延迟分配 .
4.字典管理的非分区表 不支持 段延迟分配 .
5.串行化的事务中 不支持 段延迟分配 。尝试往没有分配段的空表中插入数据将会报错。
segment creation immediate/deferred示例
create table T1 segment creation immediate as select * from user_test;
create table T2 segment creation deferred as select * from user_test;
配置参数为false
alter system set deferred_segment_creation=false;
版权声明:本文为博主原创文章,未经博主允许不得转载。
oracle
- 上一篇:Oracle ceil 函数
- 下一篇:Oracle中group by用法