最近公司换服务器,服务器上的Oracle 换成了oracle11g; 在导出的时候发现 部分表丢失;经过查询发现,只要是空表都没有导出来。
之后发现是;11g中有个新特性,当表无数据时,不分配segment,以节省空间。
此时 1.就只能向空表中插入一条数据,然后再删除这个数据 ,则产生segment。导出时则可导出空表(但是操作起来如果空表太多,就很麻烦了)
查询当前为空的表: select * from all_all_tables where num_rows='0' and owner='CONTRACT_CS'
2.执行:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
然后再执行该语句的执行结果(alert 表名 allocate extent;...)。执行后就不会再丢失表了。
EXP语法:exp username/userpass@oracle实例名 file=盘符:\xxxxxxxxx.dmp