Oracle 不能导出空表,以及少表的情况

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

处理Oracle导出dmp文件无法处理空表,以及少表的情况
方法1、批量处理空表

步骤1、先分析表
        生成分析语句
        --select 'analyze table '||table_name||' compute statistics;' from user_tables;

步骤2、将分析语句拿出来执行
        类似以下语句
        analyze table table_name compute statistics;

步骤3、处理空表
        生成处理语句
        --select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
步骤4、执行处理语句
        类似以下语句
        alter table table_name allocate extent;
步骤5、查询所有空表
        --select table_name from user_tables where NUM_ROWS=0;

 

方法2、设置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 

------------------------------------ ----------- ------------------------------ 

deferred_segment_creation            boolean     FALSE

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

考虑到有的库中表较多(例如我接触到的某一个库有7000+张表手动分析每一张表起来较为繁琐,后期将发布一个java脚本用于自动分析表(本文中两种方法为参考其他博主资料)

你可能感兴趣的:(Oracle 不能导出空表,以及少表的情况)