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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值