美文网首页数据仓库
oracle exp 导出表时会发现少表,空表导不出解决方案

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

作者: 明明德撩码 | 来源:发表于2020-03-31 17:36 被阅读0次

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

具体解释:

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

下面给出解决办法:

对空表分配空间

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

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

相关文章

网友评论

    本文标题:oracle exp 导出表时会发现少表,空表导不出解决方案

    本文链接:https://www.haomeiwen.com/subject/dckguhtx.html