2010-03-04 25 views
21

Tenía curiosidad sobre cómo el cliente ligero Oralce JDBC implementa tiempo de espera de consulta. Esto puede establecerse llamando al método setQueryTimeout (int seconds) de java.sql.Statement .¿Cómo se implementa el tiempo de espera de consultas JDBC de Oracle?

¿Está implementado esto en el controlador en el lado del cliente? ¿Se ha generado y unido un nuevo hilo ? ¿O el controlador JDBC simplemente envía un parámetro a Oracle y luego aplica el tiempo de espera?

Después de que se alcanza el tiempo de espera, ¿qué recursos del cliente y la base de datos se liberan, y que se almacenan? ¿Oracle continúa para ejecutar la consulta a pesar de que el cliente la abandonó o terminó en ? ¿Todavía hay un objeto de cursor en el lado del cliente?

Gracias

Respuesta

11

Tanel Poder escribió un article sobre cómo funciona una Cancelación a través del OCI (Interfaz de llamada de Oracle). Supongo que se hace algo similar para JDBC. Si está utilizando el controlador grueso, a través de OCI, podría intentar rastrear la sesión (a través de la configuración sqlnet.ora) y ver qué se graba.

+0

Entonces, ¿esto significa que el controlador JDBC engendra otra banda de rodadura para la consulta y espera a que se agote el tiempo de espera, y luego envía un OCICancel? – oneself

+0

No se pudo decir si se trata de un hilo por separado o simplemente un ciclo que dice "Cualquier cosa del servidor ... ha excedido el tiempo de espera ... cualquier cosa del servidor ... ha superado el tiempo de espera ..." –

1

sí sé que la consulta no continúa en el lado del servidor cuando se alcanza el tiempo de espera. Hay alguna opción de intención/señal enviada al servidor antes o después de que se alcanza el tiempo de espera para indicar que el servidor debe detenerse. Lo he verificado al buscar en el servidor en varias tablas V $ para ver si la consulta se está ejecutando. (V $ SESSION, V $ SQL, etc.)

2

Cuando una consulta realmente supera el tiempo de espera cuando se utiliza el método setTimeOut, se lanza una excepción de SQL con el código de error de Oracle ORA-01013 - user requested cancel of current operation desde el servidor Oracle.

Esto significa que la operación se ha cancelado gracefully (en lo que se refiere a Oracle/ya que orracle puede) - porque es Oracle el que envía este mensaje.

15

Según Oracle JDBC FAQ

hilo Declaración de tiempo de espera. Este hilo se crea si ejecuta cualquier instrucción con un tiempo de espera excedido. Solo se crea un hilo, independientemente de la cantidad de sentencias o conexiones. Este hilo dura la vida útil de la VM.

Cuestiones relacionadas