服务器端: Windows 2008 11GR2 (11.2.0.1)
客户端: Windows 10G 32位的
同事说现场的机器是11.2.0.1,EXP时候出现:
EXP-00056: ORACLE error 1455 encountered
ORA-01455: converting column overflows integer datatype
EXP-00000: Export terminated unsuccessfully
找到本地的环境,服务器是2003 ,11g是R1的,11.1.0.6,客户端 10.2.0.3, 执行EXP再现了该错误。
一、按照网上说的,执行sqlplus / as sysdba
sql>noaudit session
Then export again. 不好用!
二、据说导致这个错误的原因为:
Export 命令会将表的statistics 值转成成整形。 当这个statistics值超过2^31-1时,就会报这个错误。
使用EXP参数 indexes=N statistics=none 甚至加上triggers=n,仍旧同样的错误。
三、查找大表,发现该用户表都很小,刚开始实施,最大的表才20多万,按照
1. 通过dba_tables 和 dba_indexes 来查看对应表的值。 即num_rows值,看是否超过了2^31-1。如果表的numrows超过了,可以手工的修改表的这个值,如:
SQL> execute sys.dbms_stats.set_table_stats( 'SCOTT', 'EMP', numrows => 1000000000000);
该命令格式:
DBMS_STATS.SET_TABLE_STATS(
2. 删除对应的统计信息
表:
SQL>ANALYZE TABLE
索引:
SQL>ANALYZE INDEX
execute sys.dbms_stats.delete_index_stats(ownname => 'scott', indname => 'my_indx_1');
execute dbms_stats.delete_table_stats(ownname => 'scott', tabname=>'table_name')
修改完之后,再导,仍然同样的问题。
四、都不好用,最后用修改客户端字符集的方式好用了:
Set nls_lang=simplified Chinese_china.zhs16gbk
Exp zhtjgct/gct@kl11g buffer=5120000 log=c:\lxy_c10g_s11gr1.log file=c:\c10g_s11gr1.dmp
如此都好用了,在我的机器和238另外一台10g的机器都测试了一遍,导出成功:
日志文件最后内容:
. . 正在导出表 W_ALIAS导出了 26 行
. . 正在导出表 W_ALIAS_ZGS导出了 26 行
. 正在导出同义词
. 正在导出视图
. 正在导出存储过程
. 正在导出运算符
. 正在导出引用完整性约束条件
. 正在导出触发器
. 正在导出索引类型
. 正在导出位图, 功能性索引和可扩展索引
. 正在导出后期表活动
. 正在导出实体化视图
. 正在导出快照日志
. 正在导出作业队列
. 正在导出刷新组和子组
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出, 没有出现警告。
感觉挺奇怪,这种解决方法和错误中的统计数据上限什么关系呢???
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7177735/viewspace-710500/ ,如需转载,请注明出处,否则将追究法律责任。