oracle11g新特性,在创建表、索引等对象的时候,oracle不会立即为该对象创建相应的段,而是会在insert的时候,才会创建相应的段,分配区等。
但是 sys用户除外,sys用户创建的对象,会立即为其分配段,区。
sys用户在system表空间创建的任何对象,都立即为其分配区。
此处讨论非sys用户在非system表空间的情况。
scott用户 users表空间
scott:
create table ttt(id number);
select * from user_segments where segment_name='TTT';
--没有相应的段;
insert into ttt values(2); --就算此处,我们使用rollback回滚了插入操作,依然会为ttt创建段。
select SEGMENT_NAME from user_segments where segment_name='TTT';
SEGMENT_NAME
TT
可以看出,在oralce 11g中,段并不是立即被创建的。
段的是否立即创建,由参数deferred_segment_creation 控制
deferred_segment_creation
boolean TRUE
在这种情况下,所有用户中,创建之后没有插入过数据的表,用EXP将无法导出。
但是expdp则不会出现该情况。expdp会导出sechema的所有metedata。
如果像改成立即创建段,可以将deferred_segment_creation改成flase。
alter system set deferred_segment_creation=false scope=both;
或者在创建通过alter table ttt allocate extent 语句立即为其分配extent:
本文详细介绍了 Oracle 11g 中段的延迟创建特性,以及如何通过参数 deferred_segment_creation 控制段的创建方式。特别强调了 sys 用户与非 sys 用户在不同表空间下创建对象时段创建的区别,并提供了调整段创建策略的方法。
342

被折叠的 条评论
为什么被折叠?



