oracle11g用exp命令导出数据库表时,有时会发现只导出了一部分表时并且不会报错,缘由是有空表没有进行导出,以前一直没有找到方法因而用最笨的方法从新建这些空表,固然在咱们实际当中表的数量大时咱们该怎么办??? oracle10g版本中没有这样的问题。sql
因而查资料发现oracle11g有个新特性,增长了一个新特性 "deferred_segment_creation" 含义是段延迟建立,默认是true。数据库
具体是什么意思呢?咱们来解释下:oracle
若是这个参数设置为true,你新建立了一个Table,而且没有向其中插入数据,那么这个表不会当即分配extend,也就是不占数据空间,即表不分配segment以节省空间,因此这些表也没能导出来。在系统表user_tables中也能够看到segment_treated的字段里是“NO”或者“YES”说明了某张表是否分配了segment。说白了是为了能够节省少许的空间。blog
我所使用的解决方法:教程
>>> 建对空表分配空间的SQL命令。io
1.查询当前用户下的全部空表,一个用户最好对应一个默认的表空间,命令以下:table
>SQL: select table_name from user_tables where num_rows='0'select
2.根据上述查询的语句,能够构建针对空表分配空间的命令语句,具体以下;方法
>SQL:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null(注意:不少教程没有这里,这里是有可能位空的)im
上述代码可产生批量的修改表extent的SQL语句(有多少张空表就产生多少条),咱们只须要将其生成的全部sql代码所有执行,就能够给每一张已经存在的表来分配segment,就OK了。
再用exp命令进行导出便可。