zoukankan      html  css  js  c++  java
  • Oracle11g不能导出空表问题


        ORACLE 11g 用exp命令导出库文件备份时,发现只能导出来一部分表而且不提示错误,之前找不到解决方案只能把没导出来的表重新建建立。后来发现是所有的空表都没有导出来。于是想好好查查,因为在以前的10g版本中没有这样的问题。
    查资料发现Oracle 11g中有个新特性:新增了一个参数“deferred_segment_creation”含义是段延迟创建,默认是true。
    具体是什么意思呢?
    如果这个参数设置为true,你新建了一个表Table1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,即表也不分配 segment 以节省空间,所以这些表也没能导出来。在系统表user_tables中也可以看到segment_treated的字段里是“NO”或者“YES”说明了某张表是否分配了segment。说白了是为了可以节省少量的空间。

    用下面的SQL语句查询,可以发现没有导出的表其 segment_created 字段值都是 'NO'。
    Select segment_created,table_name from user_tables where segment_created = 'NO';

    解决方法:需要为每张空表添加如下语句
    alter table TableName allocate extent


    1,查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:
    SQL>select table_name from user_tables where NUM_ROWS=0;
    2,根据上述查询,可以构建针对空表分配空间的命令语句,如下:
    Select 'alter table '||table_name||' allocate extent;' from user_tables where
    num_rows=0 or num_rows is null or segment_created = 'NO'
    3,执行2中所有语句

    休闲玩家 佛系更博
  • 相关阅读:
    谈Delphi编程中“流”的应用 (一)
    Ihtmldocument2接口的使用
    TWebBrowser 异常 invalid floating point operation
    万一的 Delphi 博客 (注意 delphi的新功能)
    正则表达式应用(一)
    查询数据库所有表所有字段的某个值,生成更新代码 (VB)
    正则表达式应用(二)
    让程序支持脚本
    查探对方是否加你为好友
    常用的一些批处理,脚本功能(一)
  • 原文地址:https://www.cnblogs.com/yuyuchen/p/8075709.html
Copyright © 2011-2022 走看看