zoukankan      html  css  js  c++  java
  • Oracle 11G在用EXP 导入、导出时,若有空表对导入导出中遇到的问题的解决

    11G中有个新特性,当表无数据时,不分配segment,以节省空间

      解决方法:

      1、insert一行,再rollback就产生segment了。

      该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。

      2、设置deferred_segment_creation 参数

    show parameter deferred_segment_creation 

    NAME                                 TYPE        VALUE 
    ------------------------------------ ----------- ------------------------------ 
    deferred_segment_creation            boolean     TRUE 
    SQL> alter system set deferred_segment_creation=false; 

    系统已更改。 

    SQL> show parameter deferred_segment_creation 

    NAME                                 TYPE        VALUE 
    ------------------------------------ ----------- ------------------------------ 
    deferred_segment_creation            boolean     FALSE

     

      该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。

      需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法。

    搞了我好久,最后查到这个方法。

    先查询一下当前用户下的所有空表

    select table_name from user_tables where NUM_ROWS=0;

    用以下这句查找空表

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

    把查询结果导出,执行导出的语句

    'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
    -----------------------------------------------------------
    alter table AQ$_AQ$_MEM_MC_H allocate extent;
    alter table AQ$_AQ$_MEM_MC_G allocate extent;
    alter table AQ$_AQ$_MEM_MC_I allocate extent;
    alter table AQ$_AQ_PROP_TABLE_T allocate extent;
    alter table AQ$_AQ_PROP_TABLE_H allocate extent;
    alter table AQ$_AQ_PROP_TABLE_G allocate extent;
    alter table AQ$_AQ_PROP_TABLE_I allocate extent;
    alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent;
    alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent;
    alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent;
    alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;

    'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
    -----------------------------------------------------------
    alter table AQ$_SYS$SERVICE_METRICS_TAB_T allocate extent;
    alter table AQ$_SYS$SERVICE_METRICS_TAB_H allocate extent;
    alter table AQ$_SYS$SERVICE_METRICS_TAB_G allocate extent;
    alter table AQ$_SYS$SERVICE_METRICS_TAB_I allocate extent;

    然后再执行

    exp 用户名/密码@数据库名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log

      成功!

    转自:https://www.cnblogs.com/wangzhuxing/p/6474689.html

    第二篇,带图解决同样的问题

    使用过oralce很多种导入导出的方式,pde,sql(导出不支持blog格式),dmp格式,觉得.dmp最为方便,可以导出所有的表结构、数据、SEQ及存储过程等,下面就开始具体流程,并说明到如果表中没有数据时如何导入。

    导入导出.dmp命令,在cmd窗口执行,其中file为存储位置:

    imp 用户名/密码@网络服务名 file=xxx.dmp full=y
    exp 用户名/密码@网络服务名 file=xxx.dmp tables=(表名);
    exp 用户名/密码@网络服务名 file=xxx.dmp owner=(用户名1,用户名2);
    使用dba权限导入imp '用户名/密码@网络服务名 as sysdba' file=XXX.dmp full=y
    数据库中共有两张表,一张表有数据,一张表没有数据:

     具体导出命令,可以清楚的看到只导出了有数据的一张表,没有数据的没有导出:

    在实际情况中,并不希望出现这样的情况,希望导出并导入所有的表和数据及其它,具体操作如下:

    第一步:

     

    第二步:将执行出来的alter语句在sql窗口中执行

    第三步,查询状态,SEGMENT_CREATED为YES:

    从下图中可以看出, 这次导出的是两张表,没有数据的表后面显示了0条数据:

     

    导入表及数据:

    转自:https://blog.csdn.net/lyy176/article/details/79565690

  • 相关阅读:
    printf打印输出null问题的跟踪
    一个需求的反思
    编写可测试的代码
    编写高质量代码_改善C++程序的150个建议 读书笔记
    GetDlgItem的用法小结
    引用作为函数返回值的一点思考
    LoadRunner 使用介绍
    撰写技术文章的注意事项
    NetLimiter网速测试小坑
    需求管理和开发的一点小思考
  • 原文地址:https://www.cnblogs.com/isme-zjh/p/11389558.html
Copyright © 2011-2022 走看看