本文提到的案例
通过odbc驱动使用高精度number类型,如果遇到下面两种情况,会出现这个错误
-to fetch of a calculated column with many decimal digits
or
-to fetch of a huge numeric column
returns
SQLState: S1000
Native Error code: 1406
Driver Message:
[Oracle][ODBC][Ora]ORA-1406: fetched column value
was truncated
这是遇到了bug 4546618,需要升级odbc驱动到11.1或者10.2.0.3
从远程数据库向本地的blob变量提取超过2mb的大对象时。这是oracle对大对象的限制,不能超过32k-1.如果超过了就会报这个错误。所以所有平台和版本的oracle数据库都有这个问题,这不是一个bug。
如果远程的大对象确实超过32k-1,可以在本地建立物化视图绕过这个限制,具体参阅文档459557.1。
在oracle816以前,也有一个和第三条类似的问题,但是针对的是varchar2(4000)这样的数据类型,这是一个bug
893259,具体参阅文档96138.1
三种可能,如果远程数据库有列的定义为varchar2(4000)类型,那么
create table as select …. from tab@remotedb会触发这个问题
从remotetab创建snapshot也会触发这个问题
如果remotetab里所有数据的长度都不到2000,那么ctas和create
snapshot会成功,但是本地新建的snapshot和表的该列的数据类型会被改变为varchar2(2000),这会导致后续插入大于2000的数据时出现ora-1406错误。
序列的值超过integer允许的最大值,这是一个bug,解决方法是重建或者修改序列的maxvalue,使其不超过2147483647。
10g降级到9i,如果启用了审计(audit),也会遇到这个问题,具体解决办法参见文档438310.1。
Bug
6804150,9i客户端exp11g时,因为11g新增权限名称ADMINISTER SQL
MANAGEMENT OBJECT超过9i的30个字符限制,会导致这个错误
解决方法是打补丁6804150或者升级客户端到10.2.0.5或者修改数据库字符集到AL32UTF8。详情参见文档553993.1。
Bug 3404500 ORA-604/ORA-1406 with
QUERY_REWRITE_ENABLE=TRUE,9204、9205、10.1.0.2受影响。修改该参数为false