Esta pregunta se puede abordar de variadas maneras, sin embargo te dejamos la que para nosotros es la respuesta más completa.
Solución:
Para errores como este, debe involucrar al soporte de Oracle. Lamentablemente, no menciona qué versión de Oracle está utilizando. El error puede estar relacionado con la consulta de enlace del optimizador. Dependiendo de la versión de Oracle, se aplican diferentes soluciones alternativas.
Tienes dos formas de abordar esto:
- actualizar a 11.2
- establecer parámetro de oráculo
_optim_peek_user_binds = false
Por supuesto, los parámetros de subrayado solo deben establecerse si lo recomienda el soporte de Oracle.
Estábamos enfrentando el mismo problema, lo resolvimos aumentando initialSize
y maxActive
tamaño del grupo de conexiones.
Puedes consultar este enlace
Tal vez esto ayude a alguien.
Otro caso: si está enviando parámetros de fecha a un sql parametrizado, asegúrese de enviar java.sql.Timestamp
y no java.util.Date
. De lo contrario, obtienes
java.sql.SQLRecoverableException
: No hay más datos para leer desde el socket
Declaración de ejemplo: en nuestro código Java, estamos usando org.apache.commons.dbutils
y tenemos lo siguiente:
final String sqlStatement = "select x from person where date_of_birth between ? and ?";
java.util.Date dtFrom = new Date(); //<-- this will fail
java.util.Date dtTo = new Date(); //<-- this will fail
Object[] params = new Object[] dtFrom , dtTo ;
final List mapList = (List) query.query(conn, sqlStatement, new MapListHandler(),params);
Lo anterior estaba fallando hasta que cambiamos los parámetros de fecha para ser java.sql.Timestamp
java.sql.Timestamp tFrom = new java.sql.Timestamp (dtFrom.getTime()); //<-- this is OK
java.sql.Timestamp tTo = new java.sql.Timestamp(dtTo.getTime()); //<-- this is OK
Object[] params = new Object[] tFrom , tTo ;
final List mapList = (List) query.query(conn, sqlStatement, new MapListHandler(),params);
Acuérdate de que tienes la capacidad de interpretar si descubriste tu enigma a tiempo.