首页 > 数据库 > Oracle > EXP-0008,ORA-01455 错误
1.说明
版本:oracle 11g 11.2.0.1.0 ;导出全库时,用的命令: exp system/password@SID file=D:\file.dmp log=D:\file_exp.log full=y
导出到最后报如下错误:
exp-00008:oracle error 1455 encounteredora-01455:converting column overflows integer datatype
2.查阅官方针对ora-01455的错误
ORA-01455: converting column overflows integer datatype 。
Cause: The converted form of the specified expression was too large for the specified datatype.
含义: 转换的形式指定的表达式为指定的数据类型太大。
Action: Define a larger datatype or correct the data. Free OTM (G-Log) Support Free OTM / G-Log GC3 Support Forums Learn from OTM Experts!
含义: 定义一个大的数据类型或正确的数据。免费支持OTM(日志G)
3.在网上也找到其他网友碰到这种问题的处理方法:
(1)版本、位数问题
有的网友提到服务器数据库版本与客户端EXP的版本不匹配或者是服务器数据库是64位,客户端是32位的;实际情况是我直接服务器口操作EXP命令,不存在这类情况,排除。
(2)EXP时加其它参数
网友的写的其它文章提到要加”Direct=y INDEXES=n STATISTICS=none”这三种参数,怎么试还是报错。
(3)Oracle 11g新特性影响EXP导出
有文章http://blog.itpub.net/29512902/viewspace-1260233/,提到是因为oracle 11g参数 deferred_segment_creation,它默认为true,表中没有记录时,它是滞后分段的;false会自动分配段。’deferred_segment_creation’为true,影响导出。
参照此文提到的三个语句,
1)select 'alter table '||table_name||' allocate extent;' from user_tables WHERE SEGMENT_CREATED='NO'; 2)select * from user_indexes WHERE SEGMENT_CREATED='NO'; 3)select * from user_lobs where segment_created='NO';1)语句会查出user用户里‘segment_created’为no的表,通过alter table 重置,2)、3)语句来查询并确认是否已经都重置完成。
(1)笨方法
用每一个用户一个表空间的导出,这种可以导出;这个问题最终没有解决,只是一个用户一个表空间的导出,绕过去了!
(2)expdp
用这个命令后来我也试过了,可以导出,不报错!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8043290/viewspace-1451366/ ,如需转载,请注明出处,否则将追究法律责任。