原因:oralce_11g 中的新特性,当表无数据时,不分配 segment,以节省空间,因此导致了 exp 在导出表时,没有数据的表就会被忽略,不予导出。
解决方法:
方法一【推荐指数 0 颗星】:
向空表中插入数据,在删除,这样数据表就分配了 segment,就可以导出了 (比较蠢,不推荐)
方法二【推荐指数 3 颗星】:
停用新特性,这个需要dba的权限
sqlplus / as sysdba
show parameter deferred_segment_creation; -- 查看是否启用 true 为启动
alter system set deferred_segment_creation=false; -- 修改为不启用
show parameter deferred_segment_creation; -- 查看是否修改成功 false 未启用
存在问题:
关闭新特性后新创建的表才会起作用,关闭前创建的表不生效,需要删除后重新创建新表。
方法三【推荐指数 5 颗星】:
在对应的库上执行以下SQL,得到拼接出来的sql结果,然后拷贝结果在进行执行。
select 'alter table '|| a.table_name ||' allocate extent;' from user_tables a where a.table_name not in (select segment_name from user_segments where segment_type = 'TABLE');
推荐使用方法三 + 方法二搭配使用,这样下一次新建的库就无需在执行方法三了