Oracle导出空(无数据)表
exp name/pass file=D:/backup.dmp log=D:/backup.log;
其中table_1中有数据,table_2中没有数据;由于 ORACLE 11g中有个新特性,当表无数据时,不分配segment,以节省空间。所以导出记录可以看到table_1导出,table_2没有导出。
解决方案
1.设置deferred_segment_creation参数
注意:
该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法。
SQL> show parameter segment; #查看deferred_segment_creation状态
NAME TYPE VALUE
------------------------------------ ----------- --------------
deferred_segment_creation boolean TRUE
rollback_segments string
transactions_per_rollback_segment integer 5
#设置deferred_segment_creation为false
alter system set deferred_segment_creation=false;
2.批量处理空表
select 'alter table '||table_name||' allocate extent;' from user_tables where segment_created='NO'
查询结果如下
alter table table_2 allocate extent;
#由于table_2中没有数据查询结果只有table_2
复制查询结果,并执行SQL语句,重新导出dmp文件。