之前从plsql导表dmp格式给同事用,结果他也用plsql导入没问题,但是项目运行一直报错。
后来发现是一些表没有被建立。
再一检查,发现是我导出的dmp时,有一些表直接就会报“表不存在,导出错误”,而这些表都是空表。
上网查了之后,发现原因是:11g默认创建一个表时不分配segment,只有在插入数据时才会产生(当然也可以强制分配),以节省磁盘空间。后面解决方法转载:
第一种:在空表中插入一条数据然后再对插入的数据进行删除,便可以进行数据导出(如果表少的话可以手动执行,对于多个表的情况可以采用语句进行批量操作的)。
第二种:可以使用手工为空表分配Extent的方式,来解决导出之前建立的空表的问题。
查找空表语句:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
注意:我在查询过程中可能查找的空表有遗漏,这个可以先进行一遍导出
把查询结果导出,执行导出的语句即可。
导出结果可以通过语句导出,在PLSQL命令窗口执行下面语句:
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:\allocate.sql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off;
导出后执行导出语句
@ C:\allocate.sql;