`
一笑_奈何
  • 浏览: 66859 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle ORA-3137[12333] 关闭的连接 java.sql.SQLRecoverableException: 无法从套接字读取更多的数据

阅读更多
    今天在项目中遇到一个异常:Oracle ORA-3137[12333] 关闭的链接java.sql.SQLRecoverableException: 无法从套接字读取更多的数据 ,后来我在网上找了一下解决方案发现有两个:第一个解决方案:换oracle驱动,把驱动版本换成11.2的,但是尝试了一下没有效果,所以使用了第二个解决方案:在PLSQL执行alter system set "_optim_peek_user_binds"=false,然后重启一下服务器就没有问题了,于是我在网上查看了一下“_optim_peek_user_binds”是什么意思,后来读了一片文章才发现原来_optim_peek_user_binds默认为true,就是当sql第一次执行之后进行预编译,第二次传递进来的参数就不会进行编译,直接解释查询(估计preparedStatement对象也是通过这个实现的),所以我每次使用preparedstatement对象查询后他就会把第一次编译的sql直接解释,这就有可能会造成一种错误:如果某个列的倾斜性很厉害,那么使用BIND PEEKING就是不安全的,因为不同的参数代入,只能走第一次执行时的执行计划,那么执行计划就可能会执行错误。
但是把"_optim_peek_user_binds"=false有个缺点就是执行效率低下,有可能每次都要编译sql(这是我猜想的)。
  以下是我找的文章:http://www.2cto.com/database/201203/121737.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics