oracle11G中有个新特性,当表无数据时,不分配segment,以节省空间所以就不能被导出。
    这在我们日常备份数据库、搭建测试环境,年底新年度初始化时将产生影响。

    解决方法:
    方法1、此方法可永久解决,但需要修改数据库deferred_segment_creation参数。

    参数修改前:

    **SQL> 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
    —————————————————— —————- ———————————————
    **
    该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。
    需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。
    如需导出之前的空表,只能用第二种方法。

    方法2、此方法只对当前用户有效,每个用户要想全部导出都需要做此操作。

    连接对应数据库,执行下面语句后即可全部导出所有表:

    DECLARE
    BEGIN
    FOR V_ST IN (SELECT U.TABLE_NAME FROM USER_TABLES U where u.NUM_ROWS=0 and u.tablespace_name is not null)
    LOOP
    EXECUTE IMMEDIATE ‘ALTER TABLE ‘||V_ST.TABLE_NAME||’ ALLOCATE EXTENT’;
    END LOOP;
    END;/
    -注意:如果在SQL windows执行,不需要加“/”,如果在command window执行则需要加“/”。