alter system set deferred_segment_creation=false;
select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tables where segment_created=‘NO‘
处理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脚本用于自动分析表(本文中两种方法为参考其他博主资料)