我觉得将空表无法导出描述为没有使用过的表无法导出应该更确切一些。oralce11g为了节省存储空间,新建表的时候默认是不分配segment的。既然segment都没有,就不用谈exp了。但是oracle还是预留了系统参数DEFERRED_SEGMENT_CREATION(延迟创建segment)。这个参数,默认是true。我们可以将他改成false。这样的话,再创建表的时候就会立即分配segment了。但是修改参数之前创建的没使用过的表还是不会立即分配segment的。如果想分配segment,可以在表中插入一条数据,再删除。也可以使用alter table XXX allocate extent。这样就会创建segment了。再使用exp就会导出没使用过的表。

理解了oracle11g无法导出的不是空表而是没使用过的表之后,我们就不难看出,网络上很多人给出的查询批量修改无法导出的表的语句是错的。

比较常见的有:

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;

我们来分析一下这两个select语句。num_rows = 0表示表里的记录数为0,但是这个数值是通过数据库执行analyze table之后写入的,而数据库执行analyze table是有条件的,所以num_rows并不能实时的表示表里面的记录数。num_rows = 0, 对应表里的记录数可能会大于0。新创建的从未使用过的表在数据库没有执行analyze table之前,num_rows是NULL,只有执行了analyze table之后num_rows才会变成0。而且如果执行analyze table  tablename delete statistics把表的统计信息删除,该表在user_tables中对应的num_rows会变成NULL。

也就是说num_rows =0 并不能说明这个表没有被使用过,也并不能说明这个表里没有记录。num_rows is null也不能说明这个表没有被使用过。

理解了表无法导出是因为没有分配segment之后,我们就可以写出真正的查询批量修改无法导出的表的语句了。

select 'alter table '||table_name||' allocate extent;' from user_tables where tablespace_name = 'PORTAL_HIS' and not exists(select 1 from dba_segments where segment_type ='TABLE' and tablespace_name =user_tables.tablespace_name and dba_segments.segment_name = user_tables.table_name);

错误理解了“空表”无法导出,才写出了错误的select语句。只有真正弄明白了问题的原因,才能写出正确的应对方法。

ORACLE11g“空表”无法导出的深入分析相关推荐

  1. Oracle 11G在用EXP 导出时,空表不能导出解决

    Oracle 11G在用EXP 导出时,空表不能导出解决 11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了 ...

  2. Oracle11g新特性导致空表不能导出问题

        ORACLE 11G在用EXP导出时,发现空表(没有数据或者没有用过的表)不能导出了. 查了一下资料,说是Oracle 11G中有个新特性,当表无数据时,不分配segment,以节省空间,所以 ...

  3. mysql空表不导出问题_解决Oracle 11g空表无法导出的问题

    Oracle 11g 新增参数deferred_segment_creation ,建库的时候默认值为true,意思是延时加载,当表中不存在数据的时候,不为这个表 Oracle 11g 新增参数def ...

  4. 处理Oracle 11g在用EXP导出时,空表不能导出

    一.问题原因:      11G中有个新特性,当表无数据时,不分配segment,以节省空间 想要给空表也分配segmant,有以下两个办法: 1.insert一行,再rollback就产生segme ...

  5. 导出oracle11g的空表,轻松解决oracle11g 空表不能 exp 导出 的问题。

    oracle11g的新特性,数据条数是0时不分配segment,所以就不能被导出. 解决方法: 1插入一条数据(或者再删除),浪费时间,有时几百张表会累死的. 2创建数据库之前 使用代码: alter ...

  6. oracle导出dmp空表导不出来,如何解决Oracle11g使用dmp命令无法导出空表问题

    如何解决Oracle11g使用dmp命令无法导出空表问题 导出:exp  username/password@orcl file=路径 tables=(tb1)    //tables=(tb1)可有 ...

  7. 如何解决Oracle11g使用dmp命令无法导出空表问题

    如何解决Oracle11g使用dmp命令无法导出空表问题 导出:exp  username/password@orcl file=路径 tables=(tb1)    //tables=(tb1)可有 ...

  8. Oracle11gExp导出空表方法

    之前有需求要导入导出数据,每次发现执行exp导出的表都不全,后来发现,原来在11g新特性中,对exp的导出做了限制. Oracle11g 在使用exp 导出数据时会出现空表不能导出的问题,这是因为: ...

  9. oracle exp空数据表,Oracle11g中Exp空表的问题

    数据是从oracle10g导出的,导入oracle11g一切都正常 运行了一段时间, 需要从11g中exp导出  使用这次备份的再次导入到11g时发现少了很多表 还以为是导出有问题哩.通过N次试验和查 ...

最新文章

  1. 试编写一个汇编语言程序,大写---小写 要求对键盘输入的大写字母用小写字母显示出来。
  2. 巴克码matlab,matlab编写巴克码
  3. BBED修复DB启动问题
  4. 对比SQL Server和Oracle的关键参数
  5. getjsonobject字符串解析出错_【干货分享】达梦DISQL工具使用解析之 DISQL环境变量设置...
  6. 知识点讲解四:栈溢出(stack overflow)问题解决方案
  7. Python创建单例模式的5种方法
  8. VR创投寻鹰会,一场深圳VR行业人的大聚会
  9. LeetCode 1426. 数元素(哈希set)
  10. redis的5种数据结构和基本操作
  11. snprintf实现_高斯模糊的GLSL实现
  12. OpenCV 学习笔记-day9 OpenCV自带颜色表操作(colormap(色度图)ColormapTypes 枚举数据类型与applyColorMap()伪彩色函数)
  13. Mysql日常操作记录
  14. 离线地图for arcgis tpk
  15. 戳这里,誉天胡老师教你如何备考 HCIE-Datacom!考试通关so easy!
  16. IDEA mybatisplus 代码生成器的配置
  17. Matlab中图像剪裁命令——imcrop()
  18. 自己做一个属于自己的论坛html网站
  19. matlab在生物学中的应用,MATLAB在生物医学信号处理中的应用
  20. 米尔基于ARM架构核心板的国产化EtherCAT主站控制器解决方案

热门文章

  1. HTML怎么把文字分栏_html代码怎样优化更利于SEO排名
  2. DFS(深度优先遍历)走迷宫算法
  3. Oracle数据库基本操作
  4. 帆软报表使用及设置日志打印sql
  5. 在树莓派3B+ 上使用YOLO v3 Tiny进行实时对象检测
  6. VB 断开指定进程网络连接函数
  7. 哈佛医学院研究员解读DeepMind大突破AlphaFold:有进步,但未解决根本问题
  8. 谷歌新竞赛:在欧美长大的AI,也要认识亚非拉的生活丨可参加NIPS
  9. 别人家只会编段子,谷歌带大家找乐子 | 愚人节の真 · 大型线下踏春游戏
  10. Rokid祝明铭:大腿我们不抱,人机交互产品形态未定 | 变局者