段延迟分配
系统参数:deferred_segment_creation
alter system/alter session
也可以在create table的子句 segment creation immediate/deferred来指定.
segment creation immediate/deferred示例
来源: http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_7002.htm#i2128663
系统参数:deferred_segment_creation
alter system/alter session
也可以在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字段。
对没有分配段的表进行操作的相关说明:
1.如果使用create table ... as subquery语句,当子查询没数据返回的时候,段的创建就被延迟,如果子查询有数据返回,则会立即创建段。
2.如果在分配段之前执行了alter table ... allocate extent操作,那么段会被创建,区会被分配。不过实际上ddl语句中含有allocate extent子句会报错。
3.如果对表,索引,lob列进行DDL操作,则deallocate unused会被忽略掉。
4.对没有分配段的索引或者表分区进行Online操作,将被禁用,变成offline操作。
5.如果对含有一个或者多个lob列的表进程DDL操作,那么分区或者子分区将被物化。
alter table split [sub]partition
alter table merge [sub]partitions
alter table add [sub]partition (hash partition only)
alter table coalesce [sub]partition(hash partition only)
限制:
1.以下类型的表不能使用段延迟分配:索引组织表、聚簇表、全局临时表、会话中的临时表、内部表、typed tables、AQ tables、外部表,SYS/SYSTEM/PUBLIC/OUTLN/XDB用户的表。
2.11.2.0.2版本之后分区表、子分区也支持段延迟分配
3.
bitmap join indexes and domain indexes不支持
段延迟分配
.
4.字典管理的非分区表
不支持
段延迟分配
.
5.串行化的事务中
不支持
段延迟分配
。尝试往没有分配段的空表中插入数据将会报错。
create table test1 segment creation immediate as select * from user_test;
create table test2 segment creation deferred as select * from user_test;
来源: http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_7002.htm#i2128663
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21986929/viewspace-764221/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21986929/viewspace-764221/