临海小憇

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4426|回复: 0

Orale11g EXP-00003: 未找到段 (0,0) 的存储定义解决

[复制链接]

100

主题

121

帖子

8552

积分

论坛元老

Rank: 8Rank: 8

积分
8552
发表于 2017-5-25 10:27:21 | 显示全部楼层 |阅读模式

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);

三、问题解决

    1、批量处理所有“空表”:
        select 'alter table '||table_name||' allocate extent(size 64k);' sql_text,table_name,tablespace_name
from user_tables where table_name not in (select segment_name from user_segments where segment_type = 'TABLE');
    2、把sql_text列在sqlplus中执行一下就可以通过exp导出。

    3、如果觉得每次导出都这样做太麻烦,完全可以将deferred_segment_creation参数调为false,这样调整后建的表都会立即分配空间,但是调整前的表都不会改变,因此还需要用1、2提到的办法解决。
    --调整deferred_segment_creation为false:
        SQL> alter system set deferred_segment_creation=false;
    --调整deferred_segment_creation为默认值:
        SQL> alter system reset deferred_segment_creation;

四、其他方法

    1、现在网上提到的办法都是先往表中间insert一条数据,然后再rollback,使之分配空间。但是每次建表都这样做也是比较麻烦,不推荐。

    2、通过move(alter table table_name move的办法也能得到相同的效果,因为move会使部分索引失效,所以也不推荐。
    如果空间不是很紧张,还是建议把这个参数改成false。不过,如果你是用expdp代替exp的话,就不会出现这个问题。而且expdp比exp要快, 只是exp先入为主,大家都比较习惯是用exp。oracle添加deferred_segment_creation这个参数的目的难到只是为了节省一 点空间么?而且也只是在创建表时没分配extent,当插入数据的时候并不会节省空间,还是顺便推荐大家以后多使用expdp?     

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|临海小憇 ( 鲁ICP备16010828号-2

GMT+8, 2024-3-29 18:22 , Processed in 0.045223 second(s), 7 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表