• oracle11g导出表时会发现少表,空表导不出解决方案。


     

     

      一:背景引入

           oracle11g用exp命令导出数据库表时,有时会发现只导出了一部分表时而且不会报错,原因是有空表没有进行导出,之前一直没有找到方法于是用最笨的方法重新建这些空表,当然在我们实际当中表的数量大时我们该怎么办??? oracle10g版本中没有这样的问题。

           于是查资料发现oracle11g有个新特性,增加了一个新特性 "deferred_segment_creation" 含义是段延迟创建,默认是true。

           具体是什么意思呢?我们来解释下:

           如果这个参数设置为true,你新创建了一个Table,并且没有向其中插入数据,那么这个表不会立即分配extend,也就是不占数据空间,即表不分配segment以节省空间,所以这些表也没能导出来。在系统表user_tables中也可以看到segment_treated的字段里是“NO”或者“YES”说明了某张表是否分配了segment。说白了是为了可以节省少量的空间。

       我所使用的解决方法:

               >>> 建对空表分配空间的SQL命令。

             1.查询当前用户下的所有空表,一个用户最好对应一个默认的表空间,命令如下:

         >SQL:  select table_name from user_tables where num_rows='0'

       2.根据上述查询的语句,可以构建针对空表分配空间的命令语句,具体如下;

              >SQL:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null(注意:很多教程没有这里,这里是有可能位空的)

          

              上述代码可产生批量的修改表extent的SQL语句(有多少张空表就产生多少条),我们只需要将其生成的所有sql代码全部执行,就可以给每一张已经存在的表来分配                segment,就OK了。

              再用exp命令进行导出即可。

              参考:http://blog.sina.com.cn/s/blog_5f0e9ca50101it7n.html

  • 相关阅读:
    Oracle备份Scott
    Oracle_备份整库
    Oracle配置说明
    Linux-防火墙设置-centos6.10版
    Centos6.10-Nginx代理配置
    oen /var/run/nginx.pid failed
    Win10重置 系统诸多设置或者菜单点击无效或者异常信息回复办法
    EasyUI TreeGrid 悬浮效果
    Hive
    MapReduce高级_讲义
  • 原文地址:https://www.cnblogs.com/telwanggs/p/9947687.html
Copyright © 2020-2023  润新知