exp导出数据时丢表

Posted abclife

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了exp导出数据时丢表相关的知识,希望对你有一定的参考价值。

友军发来消息,说使用exp导出某个schema的数据的时候,发现有些表没有导出来。
因为一直没有使用exp的习惯,就使用expexpdp再次导出一次,分析二者的日志,发现exp的确有些表没有导出。


问题产生的原因:
在11gR2之前,oracle实在表被创建时就分配空间;
从11gR2(11.2.0.1)中引入了一个新特性:deferred segment creation。11gR2之后,参数deferred_segment_creation默认是true,表示表中插入第一条数据才会分配磁盘空间。空表还没有在磁盘上分配空间,不能被exp导出。

deferred segment creation特性的具体内容就不提了,请看官方文档去!

deferred_segment_creation特性的缺点是:
1.由于要在第一次insert或其他加载数据方式时才产生segment段,而段的创建需要在表空间上分配空间allocate space,若短期内大量空表存在插入的需求,则可能在短期内出现空间分配争用
2.deferred_segment_creation引入了少量的bug.

针对deferred_segment_creation特性的建议:
1.对于存在较多空表或空分区且存在空间压力的,对性能、响应时间没有太高要求的系统可以考虑使用该特性
2.对性能、响应时间有较高要求的库建议关闭该特性,deferred_segment_creation=false


问题解决方法:
1.最简单的解决方案是使用expdp代替exp。

2.找出这些表,并进行修改,然后再尝试exp导出
select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tables where segment_created = ‘NO‘;

可以查看一下表定义,就会发现这些表和已经有数据的表的定义是有区别的。重点是关注ddl语句中storage()部分
select dbms_metadata.get_ddl(‘TABLE‘,‘<TABLE_NAME>‘,‘<SCHEMA-NAME>‘) from dual;













以上是关于exp导出数据时丢表的主要内容,如果未能解决你的问题,请参考以下文章

oracle中 使用exp命令导出数据导出终止失败

oracle 11G 用exp 怎么样并发导出70G数据

如何在Oracle中使用exp和imp导出,导入dmp数据库文件

如何用exp导出oracle数据库并压缩

请问怎么用exp只导出Oracle表的数据 不导出数据库的结构 谢谢

oracle 使用exp导出表,出现如下错误,咋解决