huyingzhao 2013-02-06
今天发现从Oracle 11gR2 Exp导出表时不完整,有些没有记录的表都未导出。
检查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变化了