解决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。

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

二、解决方法:

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

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

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

‘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;

3、然后再执行

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

解决Oracle 11g在用EXP导出时,空表不能导出

时间: 2024-10-13 23:28:09

解决Oracle 11g在用EXP导出时,空表不能导出的相关文章

解决11g导出时,空表不能导出问题

--根据上述查询,可以构建针对空表分配空间的命令语句,如下:Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 --批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下:set heading off;set echo off;set feedback off;set termout on;spool d:/dropobj.sql;--Selec

Oracle 11g 导库导不出空表问题

Oracle11g 会遇到这样的问题,用exp整库导出的时候,会遇到这样的问题,库里的空表没办法导出 select * from all_all_tables aa where aa.owner='User名大写' ---查看用户下所有表 select * from all_tables t where t.owner = 'User名大写' and t.num_rows = 0;--查看用户下所有空表 好了,下面是处理方法脚本: 在命令窗口运行: set heading off; set ec

Oracle 11G在用EXP 导出时,空表不能导出解决[转]

转自:http://wanwentao.blog.51cto.com/2406488/545154 11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2.设置deferred_segment_creation 参数 show parameter deferred_segment_creation NAME         

Oracle 11G R2 用exp无法导出空表解决方法

四.  Oracle 10g以后增加了expdp和impdp工具,用此工具也可以导出空的表 oracleexpdp/impdp 用法详解 1)  创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建. createdirectory db_bak as 'd:\test\dump'; 2)  查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错) select * fromdba_directories; 3)  给s

解决oracle 11g 导出空表的方法

ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2)设置deferred_segment_creation参数 SQL> show parameter deferred_segment_creation NAME TYPE VALUE ------------------------------------

Oracle 11g 在备份导出时缺少表的问题

ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 2)设置deferred_segment_creation参数 SQL> show parameter deferred_segment_creation NAME TYPE VALUE ------------------------------------

解决 Oracle 11g 不能导出空表的问题

--解决 Oracle 11g 不能导出空表的问题 --执行下面语句,查询数据库中的空表,同时产生分配空间.把生成的结果复制出来并执行. select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 --如果以上方法不行,可改用下面方法 select 'alter table '||table_name||' allocate extent(size 64k);' from tab

oracle 11g rac dbca建库时提示创建监听

Oracle 11g rac dbca建库时提示创建监听 在安装oracle 11g rac时,使用dbca建库的过程中提示需要创建监听: Default Listener "LISTENER" is not configured in Grid Infrantructure home.Use NetCA to configure Default Listener and return DBCA 解决步骤如下 因为oracle 11g rac在安装过程中会自动创建监听,无需手动创建,首

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

    ORACLE 11G在用EXP导出时,发现空表(没有数据或者没有用过的表)不能导出了. 查了一下资料,说是Oracle 11G中有个新特性,当表无数据时,不分配segment,以节省空间,所以这些表也没能导出来.用下面的SQL查询,发现不能导出的表, segment_created 字段值都是 'NO'. Select segment_created,table_name from user_tables where segment_created = 'NO'; 解决的办法: 设置de