错误

我在项目中使用 gorm-oracle 对 oracle 进行批量读取,遇到了问题 the packet received is not a data packet ,这个问题也不是持续出现,随机出现

解决方法

通过错误信息,看到 error 来自底层库 github.com/sijms/go-ora/v2

我通过查看这个库的 github issue 看到很多类似问题,根据作者的描述,这个错误不是库导致的,尝试了其中的方法

最终通过测试降低 prefetch_rows 的值,错误会减少,最后我的 prefetch_rows=10

oracle://system:oracle@127.0.0.1:1521/bsemr?client charset=ZHS16GBK&prefetch_rows=10

总结

因为我的数据中有 BLOB 类型,数据比较大,oracle 的预查询太多,导致这个错误。