一、不可以导出空表的缘故

1、Oracle11g默认对空表不分配segment,故应用exp导出oracle11g数据库查询时,空表不容易导出。

2、设定deferred_segment_creation 主要参数为FALSE后,不论是空表还是非空表,都分配segment。

在sqlplus中,实行以下指令:

SQL>alter system set deferred_segment_creation=false;

查询:

SQL>show parameter deferred_segment_creation;

该值设定后只对后边增加的表造成功效,对以前创建的空表失灵。

二、解决方案

能够应用手工制作为空表分配Extent的方法,来处理导出以前创建的空表的难题

①select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null

应用上边的句子 会拼凑处给空表分配Extent的句子

可是,有很多空表 在主视图user_tables中的num_rows并不等于0(缘故:表格中之前有数据信息,删掉后oracle沒有统计分析,主视图user_tables中的数据信息沒有升级),因此根据上边的方式并不可以为全部的空表分配数据信息段,解决方案以下

②select 'analyze table '||table_name||' compute statistics;' from user_tables

analyze table tablename compute statistics
相当于 analyze table tablename compute statistics for table for all indexes for all columns
for table的统计数据存有于主视图:user_tables 、all_tables、dba_tables
for all indexes的统计数据存有于主视图: user_indexes 、all_indexes、dba_indexes
 for all columns的统计数据存有于尝试:user_tab_columns、all_tab_columns、dba_tab_columns

实行完后,主视图user_tables中的num_rows会升级,这时再实行①,可以给全部的空表分配数据信息段

殊不知,在实行 analyze table tablename compute statistics 时,oracle会报  object statictis are locked (这种表的统计分析被锁了),根据下边的方法开启

 ③select 'exec dbms_stats.unlock_table_stats('||'''JXDEMO'''||','''||table_name||''');' from user_tables

(③获得的結果必须在sqlplus上实行,在pl/sql developer 中的sql对话框实行出错)

③实行后获得的結果实行完后以后再去实行②就沒有object statictis are locked报错了