EXP 导出出错解决方案
前言:
今天想要把 当前用户下的数据库 导出来,使用命令
导出数据库可用语句:
exp bpmp/bkc123@127.0.0.1:5050/bkcyunty file=D:\bak\db_61.dmp log=D:\bak\db_61.log INDEXES=n STATISTICS=none
exp ppniedb/ppniedb@wisg file=/home/oracle/upgrade_bak/ppniedb.dmp log=/home/oracle/upgrade_bak/expppniedb.log direct=y compress=n rows=y
导出成功以后的导入命令:
imp bpmp/bkc123@127.0.0.1:5050/bkcyunty file=D:\bak\db_61.dmp log=D:\bak\db_61.log full=y
遇到的问题:
1)
用命令:exp ***/***@*** file=****.dmp full=y
执行后,系统提示:
EXP-00008:遇到ORACLE错误1406
ORA-01406:提取的列值被截断
EXP-00000:导出终止失败
导出当前用户所在实例下所有数据对象。
虽然不知道为什么,但是 去掉 full=y 就不报这个错了
2)
EXP-00008: 遇到 ORACLE 错误 1455
ORA-01455: 转换列溢出整数数据类型
EXP-00000: 导出终止失败
网上找到的解决方法:
方法一:
exp bpmp/bkc123@127.0.0.1:5050/bkcyunty file=D:\bak\db_61.dmp log=D:\bak\db_61.log INDEXES=n STATISTICS=none
导出语句上加上 INDEXES=n STATISTICS=none
注:错误还是存在。一台机器可以导出,而出错的机器还是报错
方法二:
1) alter system set deferred_segment_creation=FALSE;
2) select 'alter table '||table_name||' allocate extent;' from user_tables WHERE SEGMENT_CREATED='NO';
3) select count(*) from user_lobs where segment_created='NO';
4) select count(*) from user_indexes WHERE SEGMENT_CREATED='NO';
使用 导出用户(bpmp)登录oracle,
执行 3) 4) 看统计结果是否为0,
若是不为0,则执行1),且将2)查询到的结果复制后重新执行一次
再次执行 3) 4) 看统计结果是否为0,为0 后再去执行导出命令即可
注:虽然没有搞清楚,这几句话是什么意思,但是我导出成功了
参考:http://blog.sina.com.cn/s/blog_14d5a51a90102vret.html
3)
EXP-00056: ORACLE error 1455 encountered
ORA-01455: converting column overflows integer datatype
EXP-00000: Export terminated unsuccessfully
导致这个错误原因:
Export 命令会将表的statistics 值转成成整形。 当这个statistics值超过2^31-1时,就会报这个错误。
解决方法:
1. 通过dba_tables 和 dba_indexes 来查看对应表的值。 即num_rows值,看是否超过了2^31-1。
查询方法:
select * from all_tables A where A.OWNER='BPMP' and A.NUM_ROWS > 0;
或者 select * from user_tables A where A.NUM_ROWS > 0;
若是可以查询到结果,则清理一下
1)select ' analyze table ' || A.TABLE_NAME ||' compute statistics;' from all_tables A where A.OWNER='BPMP';
2)select ' analyze table ' || A.TABLE_NAME | |' compute statistics for all indexes;' from all_tables A where A.OWNER='BPMP';
3)select ' analyze table ' || A.TABLE_NAME || ' delete statistics ;' from all_tables A where A.OWNER='BPMP';
执行这三条语句,将 查询产生的结果(这里相当于自动生成sql语句),复制出来,最后一起执行
1)重新对表进行分析统计 2)3)是对表的索引记录重新分析统计和清除。
参考:http://www.hongyanliren.com/2014m12/21735.html
这里还有一种解决方法(我看不懂,不移过来了):http://blog.csdn.net/tianlesoftware/article/details/6251652
4)
修改 Oralce 客户端的字符集
Set nls_lang=simplified Chinese_china.zhs16gbk
Set nls_lang=AMERICAN_AMERICA.ZHS16GBK
注:某篇博客说字符串的编码的原因,实际上不是。这样的设置 只是将提示信息 由英文变成了中文
作者:panie
出处:http://www.cnblogs.com/panie2015/
如果您希望与我交流互动,欢迎加我微信
本文内容为作者辛苦整理书写,欢迎转载,但请保留文章出处