Apache Drill 1.19/1.3连接Oracle 9i查询时报ORA-01460错误求助
根因定位
ORA-01460报错的核心触发原因是JDBC驱动版本与Oracle 9i的兼容性不匹配。你当前使用的ojdbc8_g-21.3.0.0.jar是针对Oracle 12c及更高版本设计的驱动,没有兼容Oracle 9i的旧数据类型转换逻辑。show schemas命令可以正常执行是因为该操作仅调用基础元数据查询接口,不涉及业务数据的类型映射转换,执行实际数据查询时需要拉取业务数据做跨协议类型转换,就会触发该报错。
修复步骤
- 替换JDBC驱动:卸载现有ojdbc8_g-21.3.0.0.jar,更换为Oracle官方兼容9i版本的ojdbc14.jar,优先选择10.2.0.x系列版本,该版本是Oracle官方最后一个完整适配Oracle 9i的JDBC驱动
- 修改存储插件配置:打开Apache Drill的Oracle存储插件配置页,将
driver字段值指定为oracle.jdbc.driver.OracleDriver,在JDBC连接URL末尾追加参数?defaultRowPrefetch=10&useFetchSizeWithLongColumn=true,关闭高版本驱动才支持的自动类型转换特性 - 重启Drill实例后执行基础查询验证:先执行小数据量的单表查询测试,比如
SELECT * FROM <Oracle schema名>.<表名> LIMIT 10,确认无报错后再执行复杂查询 - 特殊类型适配:如果替换驱动后仍有报错,检查查询涉及的表是否包含CLOB、BLOB、NVARCHAR2等特殊类型字段,在存储插件的
typeMapping配置项中添加对应映射规则,将Oracle 9i的特殊字段类型映射为Drill支持的VARCHAR、VARBINARY类型即可
验证标准
show schemas命令可以正常返回所有库信息- 普通业务查询、带过滤条件的查询可以正常返回结果
- 聚合类查询(COUNT、SUM、GROUP BY等)运算结果符合预期
内容的提问来源于stack exchange,提问作者Sungjin
相关产品推荐
相关产品推荐

