ORACLE 11g 新增了一个参数:deferred_segment_creation,从字面理解含义是段延迟创建,该参数取值范围是true和false,默认是true。具体是如果deferred_segment_creation为true,当新建表并且没有向其中插入数据的时候,这个表不会立即分配extent,即不占数据空间,只有insert数据后才分配空间,这样做可以节省少量的空间。如果deferred_segment_creation为false,那就和之前版本创建表一样,创建时即分配extent。
一、问题提出
如果deferred_segment_creation为默认值,当通过EXP命令来导出整个用户时,所有没有数据的表都导不出来。
二、问题分析
1、新建表没有分配extent,在user_segments视图中必然查不到,但是在user_tables中是可以查到的。这样就可以找出哪些表是没有创建extent的:
select * from user_tables where table_name not in (select segment_name from user_segments where segment_type = 'TABLE');
2、通过alter table xxx allocate extent 语句立即为其分配extent:
alter table t1 allocate extent (size 64k);
# cat a1 | awk '{print "alter table "$1" allocate extent (size 64k);"}'^C
# cat a1 | head -10
ACCEPT_INFO
ACCT_FILE
ACCT_ITEM
ACCT
awk 拼接字符
最新推荐文章于 2022-04-27 23:42:13 发布