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: