Oracle11g有个新特性,这个新特性 "deferred_segment_creation" 含义是段延迟创建,默认是true。如果这个参数设置为true,你新创建了一个Table,并且没有向其中插入数据,那么这个表不会立即分配extend,也就是不占数据空间,即表不分配segment以节省空间,所以这些表也没能导出来。在系统表user_tables中也可以看到segment_treated的字段里是“NO”或者“YES”说明了某张表是否分配了segment。说白了是为了可以节省少量的空间。
解决方法如下:
1、查询该用户下的所有空表
select table_name from user_tables where NUM_ROWS=0;
2、构建针对空表分配空间的命令语句
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
查询结果如下所示:

上述代码会产生批量的修改表extent的SQL语句,只需要将其生成的所有sql代码全部执行,就可以给每一张已经存在的表来分配segment。
接着用exp语句导出即可。
文章转载自TNodes,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




