oracle 通过exp导出表时,出现 EXP-00011 TABLE_NAME does not exist 。
查询资料是说 oracle 11g 在用exp命令备份数据时,如果表中没有数据会出现次情况。
原因:oracle 11g 默认创建一个表时,不分配 segment 只有插入了数据时才会产生,以便节省空间。
执行下面语句,查询 segment 状态:select name, type, value,description, update_comment
from v$parameter where name = 'deferred_segment_creation' ;
为了以后创建表能直接分配segment,用系统账号登陆数据库,修改 deferred_segment_creation = false
alter system set deferred_segment_creation = false
上面的方法解决了修改后,创建新表时默认分配segment,但是已经存在的还是没有。
解决办法:
1、通过插入数据
2、强制分配(alter table table_name allocate extent ;)
查询并生成修改语句,导出查询语句,删除多余的语句,然后执行即可。
select 'alter table ' || table_name || ' allocate extent ; ' from user_tables order by table_name ;
导出查询结果文件
删除多余信息,保留修改语句,通过工具全部替换。