Oracle使用exp无法导出空表的解决方法
Oracle使用exp无法导出空表的解决方法
原因:11G中有个新特性,当表无数据时,不分配segment,以节省空间
解决方法:设置deferred_segment_creation
1.使用命令 show parameter deferred_segment_creation; 查看deferred_segment_creation当前状态
2.使用命令 alter system set deferred_segment_creation=false; 修改值为false
该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。
需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。
如果你想导出之前的空表,请往下看
1.使用命令 select 'analyze table '||table_name||' compute statistics;' from user_tables; 分析一下当前用户下的所有表,然后把输出的结果执行,如果不分析在查询空表的时候可能查不出结果。
2.使用命令 select * from user_tables where num_rows=0; 查询当前用户下的所有空表。
3.使用命令 select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 生成语句,然后把输出的结果执行
经过如上三部操作,exp就可以导出空表了。