柠萌小姐 发表于 2016-7-28 15:26:51

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:56

RE: Oracle 11g export 导出的表数量不全 deferred_segment_creation的...

真的不错,可以解决 Oracle 不能导出空表的问题,网站感觉不错,内容好全啊,希望能有更好的内容,由站长亲自维护,学习了!
页: [1]
查看完整版本: Oracle 11g export 导出的表数量不全 deferred_segment_creation的用法