标签:
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:上面的方法大都是参照网上的解决方案进行的整理,本人只是按照自己的思路做了一下整理
标签:
原文地址:http://my.oschina.net/jvi/blog/465620