首页 > 其他 > 详细

exp导出数据时丢表

时间:2018-11-23 13:30:12      阅读:147      评论:0      收藏:0      [点我收藏+]

友军发来消息,说使用exp导出某个schema的数据的时候,发现有些表没有导出来。
因为一直没有使用exp的习惯,就使用exp\expdp再次导出一次,分析二者的日志,发现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导出数据时丢表

原文:https://www.cnblogs.com/abclife/p/10006815.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!