oracle exp 导出表时会发现少表,空表导不出解决方案

版权声明:欢迎加入Oracle 技术分享群:425614362 如果有不对的地方还请指正! https://blog.csdn.net/shiyu1157758655/article/details/83409436

今天遇到一个群有,他说在oracle11g上利用exp导出的时候,发现原本数据库中有723张表,但是用exp导出的时候却只能导出304张出来,其实这个原因是oralce11g 中增加了一个新特性 "deferred_segment_creation" 含义是段延迟创建,默认是true。

具体解释:

 如果这个参数设置为true,你新创建了一个table,并且没有向其中插入数据,那么这个表不会立即分配extend,也就是不占数据空间,即表不分配segment以节省空间,所以这些表也没能导出来。在系统表user_tables中也可以看到segment_treated的字段里是“NO”或者“YES”说明了某张表是否分配了segment。说白了是为了可以节省少量的空间。

下面给出解决办法:

1.最笨的方法是给空表随便添加一笔数据

2.对空表分配空间

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

  上述代码可产生批量的修改表extent的SQL语句(有多少张空表就产生多少条),我们只需要将其生成的所有sql代码全部执行,就可以给每一张已经存在的表来分配 segment,然后就可以利用exp 导出了

猜你喜欢

转载自blog.csdn.net/shiyu1157758655/article/details/83409436