Orale11g EXP-00003: 未找到段 (0,0) 的存储定义解决
来源:互联网 发布:破解版gta5显示无网络 编辑:程序博客网 时间:2024/05/23 14:32
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?
一、问题提出
如果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?
阅读全文
0 0
- Orale11g EXP-00003: 未找到段 (0,0) 的存储定义解决
- Orale11g EXP-00003: 未找到段 (0,0) 的存储定义解决
- Orale11g EXP-00003: 未找到段 (0,0) 的存储定义解决
- EXP-00003: 未找到段 (0,0) 的存储定义
- EXP-00003: 未找到段 (0,0) 的存储定义
- 11G exp 分区表报错 EXP-00003: 未找到段 (0,0) 的存储定义
- oracle批量循环执行sql,EXP-00003: 未找到段 (0,0) 的存储定义
- Oracle 11G 出现EXP-00003: 未找到段 (0,0) 的存储定义
- ORACLE EXP-00003: 未找到段 (****) 的存储定义
- EXP-00003: 未找到段 (4,131) 的存储定义
- EXP-00003: 未找到段 (xxxxx) 的存储定义
- ORACLE EXP-00003: 未找到段 (****) 的存储定义
- oracle11g 数据库导出报“ EXP-00003: 未找到段 (0,0) 的存储定义”错误的解决方案
- oracle11g 数据库导出报“ EXP-00003: 未找到段 (0,0) 的存储定义”错误的解决方案
- oracle exp EXP-00003: 未找到段 (12,11) 的存储定义
- ORACLE 11G 导出报错(EXP-00003)未找到段 (0,0) 的存储定义
- oracle 导出EXP-00003: 未找到段 (5,38467) 的存储定义的解决方法
- 导出nclob.出现.EXP-00003: 未找到段 (8,375419) 的存储定义(转)
- 打造完美接口文档
- 7月25日云栖精选夜读:刷脸out了?阿里“刷脚购物”亮相CVPR 2017
- ES6语法基础
- 独家发布 | Linux NVMe Driver学习笔记大合集
- MySQL小技巧
- Orale11g EXP-00003: 未找到段 (0,0) 的存储定义解决
- 深入了解JVM的一些笔记
- 百练_3711:字符串移位包含问题
- Android xml布局中设置颜色透明度
- 解决ScrollView下嵌套ListView进页面不在顶部的问题
- 互联网+业务转型,云计算厂商对比
- 网页管理页面创建RabbitMQ队列
- 【递归入门】组合的输出
- 1077. Kuchiguse (20)