Oracle 11g R2 exp导出表不完整


今天发现从Oracle 11gR2 Exp导出表时不完整,有些没有记录的表都未导出。

网上查了一下,说是Oracle 11g R2的新特性Deferred Segment Creation 引起

检查user_tables表发现没有导出的表的segment_created属性是NO

解决办法:

1、可通过下面语句生成SQL执行:

select 'alter table '|| table_name ||' move;'
 from user_tables where segment_created='NO';

或是
select 'alter table '|| table_name ||' allocate extent;'
 from user_tables where segment_created='NO';

2、通过修改系统参数(未测试):

可以通过修改deferred_segment_creation 为false 来禁用这个功能,修改只对以后创建的table 生效。 对于已经存在的table不受影响。

alter system set deferred_segment_creation=true; 

其它
alter table ... move不但拉回了HWM,而且回收了extent

在oracle9i中,delete很大的表的数据后,需要收缩表的空间,

可以使用alter table tabname move (tablespace tbs_name),

注意:这个时候一定需要rebuild index . 因为move后,数据的rowid变化了

相关内容