2011-05-24 9 views
6

Ayer por la tarde salí de la oficina con un programa en ejecución de Java escrito por mí. Debe insertar muchos registros en la base de datos de nuestra compañía (Oracle) usando una conexión JDBC. Esta mañana, cuando he vuelto al trabajo vi este error (capturado por un try-catch):SQLRecoverableException: Excepción de E/S: restablecimiento de la conexión

java.sql.SQLRecoverableException: I/O Exception: Connection reset 

El programa escribió casi todos los registros antes de conseguir este problema, pero lo que si ocurre temprano (a sólo unos minutos después de que yo salir de la oficina por la noche)? No puedo entender lo que sucedió, me comuniqué con el administrador de mi base de datos y me dijo que no había ningún problema en particular en la base de datos.

¿Alguna idea sobre qué sucedió y qué puedo hacer para evitarla?

Respuesta

8

Esto simplemente significa que algo en el back-end (DBMS) decidió dejar de funcionar debido a la falta de recursos, etc. No tiene nada que ver con su código o la cantidad de insertos. Puede leer más acerca de problemas similares aquí:

esto puede no responder a su pregunta, pero obtendrá una idea de por qué podría estar sucediendo. Puede seguir discutiendo con su DBA y ver si hay algo específico en su caso.

+0

Yo también recomendaría una comprobación de espacio en disco en su base de datos a VM dale a tu DBA una causa probable para proceder. df -h – saalehr

1

Su excepción lo dice todo "Restablecimiento de la conexión". Se perdió la conexión entre su proceso java y el servidor db, lo que podría haber sucedido por cualquier motivo (como problemas de red). El SQLRecoverableException solo significa que es recuperable, pero la causa raíz es el restablecimiento de la conexión.

4

Experimentamos estos errores intermitentemente después de actualizar de 11g a 12c y nuestro java estaba en 1.6.

La corrección para nosotros fue actualizar Java y JDBC a partir 6 a 7

export JAVA_HOME='/usr/java1.7' 

export CLASSPATH=/u01/app/oracle/product/12.1.0/dbhome_1/jdbc/libojdbc7.jar:$CLASSPATH 

Varios días después, todavía se restablece la conexión intermitente.

Terminamos eliminando todo el java 7 anterior. Java 6 estaba bien. El problema se solucionó al agregar esto a nuestro usuario bash_profile.

Nuestras secuencias de comando groovy que estaban experimentando el error estaban usando/dev/random en nuestro servidor de VM por lotes. A continuación java forzado y groovy para usar/dev/urandom.

JAVA_OPTS exportación = "$ JAVA_OPTS -Djava.security.egd = file: /// dev/urandom"

3

Solución
Cambiar la configuración para su aplicación, por lo que este parámetro [-Djava .security.egd = file:/dev /../ dev/urandom] junto al comando java:

java -Djava.security.egd = file:/dev /../ dev/urandom [ su comando]

Ref .: - https://community.oracle.com/thread/943911

7

El error se produce en algunas distribuciones de RedHat.La única cosa que hay que hacer es ejecutar la aplicación con el parámetro java.security.egd = file: /// dev/urandom:

java -Djava.security.egd=file:///dev/urandom [your command] 
Cuestiones relacionadas