exp导出数据时丢表
2018-11-23 12:22 abce 阅读(970) 评论(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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2016-11-23 python - 文件迭代