JEE Study|JAVA EE|企业级开发学习网

标题: Oracle 11g export 导出的表数量不全 deferred_segment_creation的用法 [打印本页]

作者: 柠萌小姐    时间: 2016-7-28 15:26
标题: Oracle 11g export 导出的表数量不全 deferred_segment_creation的用法
导出表的时候,发现导出的表数量不对,有的表根本没有导出。仔细观察可以发现,未导出的表都是没有数据的。

这时可以检查下参数:deferred_segment_creation
该参数意思是当创建对象(如表),在没有插入数据时,是否立即分配空间。
参数值默认为true,即不分配空间。
所以导致没有分配空间的表,不会被导出。

在命令窗口输入:show parameter deferred_segment_creation;  可以看到VALUE 是TRUE。




需要把deferred_segment_creation的值改为FALSE。

alter system set deferred_segment_creation=false;




此时,虽然把参数deferred_segment_creation的值改为FALSE,但只是针对此后新建的表生效,新表会立即分配空间。但之前的空表,依然没有为分配。
可以通过手工为空表分配的方式解决。

执行语句:
select 'alter table '||table_name||' allocate extent;' from user_tables WHERE SEGMENT_CREATED='NO';

查询结果:
alter table table1 allocate extent;
alter table table2 allocate extent;
alter table table3 allocate extent;
alter table table4 allocate extent;

复制查询结果并执行。


至此,导出问题就完美解决啦!


需要注意的是,deferred_segment_creation=ture,只针对普通用户,不针对sys用户。
1.在sys用户下,创建一个没有数据的表时,同时自动分配空间;
2.在普通用户下,创建一个没有数据的表时,不会分配空间。




作者: angel    时间: 2016-7-28 18:35
标题: RE: Oracle 11g export 导出的表数量不全 deferred_segment_creation的...
真的不错,可以解决 Oracle 不能导出空表的问题,网站感觉不错,内容好全啊,希望能有更好的内容,由站长亲自维护,学习了!




欢迎光临 JEE Study|JAVA EE|企业级开发学习网 (http://jeestudy.com/) Powered by Discuz! X3.2