ITPub博客

首页 > Linux操作系统 > Linux操作系统 > deferred_segment_creation

deferred_segment_creation

原创 Linux操作系统 作者:akagea 时间:2013-06-18 22:19:40 0 删除 编辑
段延迟分配
系统参数: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.串行化的事务中不支持段延迟分配。尝试往没有分配段的空表中插入数据将会报错。

segment creation immediate/deferred示例
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博客 ” ,链接:https://blog.itpub.net/21986929/viewspace-764221/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: purge
请登录后发表评论 登录
全部评论

注册时间:2012-05-07

  • 博文量
    4
  • 访问量
    5575