oracle数据库执行sql报错:"无法从套接字读取更多的数据"

在看一个项目上的问题时,发现该项目执行某一条比较复杂一点的sql时就会报错,系统提示“无法从套接字读取更多的数据”,然后在一段时间内,整个系统执行任何操作,任何sql,都会报该错误,导致整个系统无法使用,并且无法登录。但是过了10几分钟,又恢复了。

常见问题

  1. 有可能是sql中有查询clob或者blob类型的字段,由于字符超长了,数据库配置限制了,也会报改错(搜索了别的文章看到的)
  2. 大部分情况是sql中的where条件中有使用过多的in值条件,例如in('aa','123'........)超过一定的长度后,oracle也会有报该错误。解决方案是将in值放到临时表中,通过查询临时表来解决。
  3. oracle数据库的bug;

我遇到的问题

项目应用中报错提示“无法从套接字读取更多的数据”,但是将sql放到plsql中执行时就会提示:“ORA-03113: end-of-file on communication channel”如下图所示,并且plsql卡死,执行别的普通sql没有任何问题

解决方案

通过联系数据库工程师分析,该问题为oracle数据库的一个bug,通过设置参数

alter system set optimizer_features_enable='10.2.0.4';

该参数表示数据库sql优化器的版本,由于当前版本有问题,那么可以通过该参数把版本往前设置一个版本,绕过改bug。但是这样会影响数据库的sql执行的性能,设置完后应该验证测试,其他功能是否有影响。

posted @ 2023-05-29 13:57  菜鸡变小鸟  阅读(4380)  评论(0编辑  收藏  举报