最近用Oracle 11g的exp命令备份数据库,然后恢复,发现导出前表中还从没插入过数据的表并没有导出。以前用9i、10g的时候都没发现过类似问题,着实被坑了一把,google一查发现11g中有个新特性,当表无数据时,不分配segment以节省空间。为了使空表也能导出需要如下处理:
1) 用以下这句查找空表
select 'alter table '||table_name||' allocate extent;' from user_tables where segment_created='NO';
把查询结果导出,执行导出的语句
2) 然后再使用exp命令导出数据库即可