码迷,mamicode.com
首页 > 数据库 > 详细

oracle11g无法导出空表问题原理方案

时间:2015-06-11 19:40:21      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。

解释如下:

    如果这个参数设置为true,你新建了一个表T1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,只有当你insert数据后才分配空间。这样可以节省少量的空间。所以需要设置

deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。

具体操作为在sqlplus中,执行如下命令:

SQL>alter system set deferred_segment_creation=false;

即可设置deferred_segment_creation值为false

执行以下语句可查看其状态:
SQL>show parameter deferred_segment_creation;


注 : 以上命令只对之后新增的表有效,对现有空表没有任何影响,因此还需要进一步对现有空表进行处理,

即执行如下操作:

首先执行以下sql语句,手工为空表分配Extent,构建针对空表分配空间的命令语句

SQL>Select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tables where num_rows=0

然后生成类似与如下格式的命令语句

alter DOM_PHOTO1 allocate extent
alter DOM_PHOTO2 allocate extent
alter DOM_PHOTO3 allocate extent
alter DOM_PHOTO4 allocate extent
alter DOM_PHOTO5 allocate extent
alter DOM_PHOTO6 allocate extent
alter DOM_PHOTO7 allocate extent

然后复制这些语句到sql窗口执行一下即可(注:生成的每条sql结尾并没有分号结尾,所以需要自己手动格式化一下sql再执行)

 

执行完上面生成的sql,再重新导出数据库,这样空表和有数据的表可以一并导出来了

ps:上面的方法大都是参照网上的解决方案进行的整理,本人只是按照自己的思路做了一下整理

oracle11g无法导出空表问题原理方案

标签:

原文地址:http://my.oschina.net/jvi/blog/465620

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!