我是靠谱客的博主 强健巨人,最近开发中收集的这篇文章主要介绍oracle exp-00011的解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天在导出库再导到另个库的时候出现发现部分表没有导出来
以下是导出时报EXP-00011错误日志
Export started on 2013-1-29 16:23:23
E:oracleproduct10.2.0db_1BINexp.exe parfile=C:DOCUME~1ADMINI~1LOCALS~1Tempplsexp.par
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过直接路径...
. . 正在导出表                  BASE_ALL_TABLE导出了           1 行
. . 正在导出表                   BASE_APP_CORP导出了          38 行
EXP-00011: SINOFM.BASE_DEMO_MODEL 不存在
. . 正在导出表                       BASE_DICT导出了         662 行
...

看下表结构 --发现存在
SQL> desc BASE_DEMO_MODEL
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(15)
 NAME                                               VARCHAR2(50)
 AGE                                                NUMBER(4)
 ADDRESS                                            VARCHAR2(100)
 VERSION                                            NUMBER(15)
 NAME1                                              VARCHAR2(50)

通过找些资料总结以下解决方法:
~~看下数据库的延迟段创建参数
SQL> show parameter DEFERRED_SEGMENT_CREATION
NAME                                 TYPE                 VALUE
----------------------------------- -------------------- --------------------
deferred_segment_creation            boolean              TRUE

首先先说下 对DEFERRED_SEGMENT_CREATION 的讲述
在 ORACLE 11g R2 版本时提供deferred segment creation延长段(空间分配法:创建非分区表,表的table segment不会创建,直到insert 数据时自动创建个segment)
优点:
创建大量表时,暂时不用的表,节约大量的磁盘开销,减少存储空间:降低空间开销
没分配segment,create table仅操作数据字典,不设计空间分配,提高效率:加快应用的部署
缺点:
在exp、imp的时候。这些表被当成不存在的表(以下有解决方法)
注意:该特性不适用sys/sysdba用户 --> ∵DBA用户会自动在创建表的时候直接创建segment,普通/system用户不会
       详细实践参考 http://www.dataguru.cn/forum.php?mod=viewthread&tid=54230 
deferred_segment_creation true :那么表的segments和相关的对象(索引,lobs)都会在insert 之后才创建。目的:减少对磁盘空间的占用和创建时间
    false :禁用此功能,对改后的table生效

 

exp 不支持deferred  segment ∴进行导出时, 会报:EXP-00011: 'Table Name' does not exist。(Expdp/impdp对deferred segment是支持的)建议使用数据泵导入导出

要是数据库报此错误延迟段参数= true的话就可能有空表,没有分配segment
 

--首先查看未分配segment的表
 select table_name from tabs t where not exists (select segment_name from user_segments s where s.segment_name=t.table_name);

解决EXP-00011方法:
1、在创建表时就分配segment
 createtable table1 (id number)) segment creation immediate;
2、也可以通过改deferred_segment_creation为false:
SQL> alter system set deferred_segment_creation=false;-->只对改后的表生效
--调整deferred_segment_creation为默认值(true):
SQL> alter system reset deferred_segment_creation;
3、对于已存在的空表,通过手动的分配segment/直接向空表里insert一条数据的方法
SQL> alter table table_name move; 
SQL> alter table table_name allocate extent;
对于多得表查询执行(select 'alter table '||table_name||' allocate extent(size 64k);' from tabs t where not exists (select segment_name from user_segments s where s.segment_name=t.table_name) and rownum=1;)

 

--查看segment分配情况
select segment_name fromuser_segments where segment_name in ('tname1','tname2...');

Export started on 2013-1-29 19:02:44
E:oracleproduct10.2.0db_1BINexp.exe parfile=C:DOCUME~1ADMINI~1LOCALS~1Tempplsexp.par

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过直接路径...
. . 正在导出表                 BASE_DEMO_MODEL导出了           0 行
成功终止导出, 没有出现警告。

Export finished on 2013-1-29 19:02:46

OK了

 

具体的DEFERRED_SEGMENT_CREATION 参考  http://wenku.baidu.com/view/44ff613c580216fc700afd80.html 

 

总结:数据库选择了延迟段,所以为空的表(此为空是指表一直以来都是空的,并不是清空后)在exp的时回报EXP-00011: 'Table Name' does not exist。通过给表增加数据、增加extent/move、创建表时分配segment、改参数,之后在进行exp,,最好是直接用expdp/impdp


最后

以上就是强健巨人为你收集整理的oracle exp-00011的解决办法的全部内容,希望文章能够帮你解决oracle exp-00011的解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部