数据库版本:11.2.0.2
客户端版本:11.2.0.1
做个测试,新建一张test1,插入数据,另外再建1张空表test2
exp用户导出报错
. . 正在导出表 test1
导出了 5 行
EXP-00008: 遇到 ORACLE 错误 1455
ORA-01455: 转换列溢出整数数据类型
EXP-00000: 导出终止失败
客户端以表方式导出test1没问题,但是在导test1的下一张表格test2报同样问题,同时在某些客户端报错信息多了条EXP-00003: no storage definition found for segment(0,0)
于是在服务器端进行相同的测试,导出均没问题。
此原因是由于11.2.0.1遗留下来的一个bug。
在11.2.0.1上用户模式的导出方式会忽略过没有分配segment的空表,日志不报任何错误。而以表模式导出空表时会报该表或视图不存在的错误。
尽管ORACLE说在11.2.0.2上此bug已经得到解决,但是前提是客户端需要同样是11.2.0.2的版本。
针对此情况最有效的方式可以采用以下2种对11.2.0.2数据库进行处理
方法一:
修改11g新参数deferred_segment_creation 改为false,重建相关新表,原因是11g默认初始新建表并不马上分配segment
之后导出无报错(同时也是11.2.0.1的解决方案)
方法二:
将客户端升级到11.2.0.2、
对于空表先插入数据再delete的方式或者创建表时加入allocate extent size 1k的子句,可以采用但并不方便