oracle空表导出的问题

Posted smile_elims

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle空表导出的问题相关的知识,希望对你有一定的参考价值。

之前再做项目的时候下载了一个开源的程序,数据库在移植的时候通过exp/imp导入导出,结果程序在启动时报错,对比过后发现两个数据库表相差了十几个,再排查问题,发现少掉的十几个表全部是空表,查了一下oracle11g的特性,发现当数据条数是0时不分配segment,所以就不能被导出!我勒个擦!坑爹有木有!

但是总不能每个表插入一条数据再导出吧,作为一个程序猿总不能上手工课吧,于是继续查,找到了一个解决办法,特此记录,以儆效尤!

第一种解决办法:

在创建数据库之前,先将数据库segment属性进行修改,SQL语句如下:

alter system set  deferred_segment_creation=false;

含义如下:deferred_segment_creation,含义是段延迟创建,默认是true。如果这个参数设置为true,你新建了一个表T1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,只有当你insert数据后才分配空间。这样可以节省少量的空间。设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。需要注意的是,该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用,在修改后需要重新启动数据库参数才能生效

第二种解决办法:

先查一下哪些表是空的,然后使用ALLOCATE EXTENT为数据库对象分配Extent,SQL如下:

查询空表:select table_name from user_tables where NUM_ROWS=0; 

生成修改语句:select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tables where num_rows=0 ;

执行生成修改语句的SQL后会生成一堆的ALTER的SQL语句,将生成的语句执行后,再进行exp数据导出,就可以导出所有数据了!

以上是关于oracle空表导出的问题的主要内容,如果未能解决你的问题,请参考以下文章

oracle 11g使用exp导出空表问题解决办法

oracle exp不能导出空表,怎样才能导出空表的结构呢?imp怎么导入空表结构?

Oracle11g在使用exp导出时不导出空表问题的解决办法

如何解决Oracle11g使用dmp命令无法导出空表问题

轻松解决oracle11g 空表不能exp导出的问题。

Oracle 11G在用EXP 导出时,空表不能导出解决