zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    平方十位数
    随意组合
    显示二叉树
    四阶幻方
    方格填数
    数字排列
    青蛙跳N阶(变态跳)
    Mysql可重复读、避免幻读原理
    动态规划典型例题--连续子数组的最大和
    行列有序的二维数组查找
  • 原文地址:https://www.cnblogs.com/abclife/p/10006815.html
Copyright © 2011-2022 走看看