Как реализован тайм-аут JDBC-запросов Oracle? - PullRequest
21 голосов
/ 04 марта 2010

Мне было любопытно, как тонкий клиент Oralce JDBC реализует время ожидания запроса. Это может быть установлено путем вызова setQueryTimeout java.sql.Statement (int секунд) способ.

Это реализовано в самом драйвере на стороне клиента? Это новая тема породила и присоединилась? Или драйвер JDBC просто отправить параметр в Oracle, а затем он устанавливает таймаут?

По истечении времени ожидания, какие ресурсы на клиенте и базы данных освобождены, а какие торчат? Oracle продолжает выполнить запрос, даже если клиент отказался от него или он прекращено? Есть ли еще объект-курсор на стороне клиента?

Спасибо

Ответы [ 4 ]

15 голосов
/ 02 августа 2010

Согласно FAQ по Oracle JDBC

Поток времени ожидания оператора. Этот поток создается, если вы выполняете какое-либо утверждение с таймаутом. Создается только один поток независимо от количества операторов или соединений. Этот поток длится время жизни виртуальной машины.

12 голосов
/ 04 марта 2010

Танель Подер написал статью о том, как Cancel работает через OCI (Oracle Call Interface). Я думаю, что нечто подобное сделано для JDBC. Если вы используете толстый драйвер через OCI, вы можете попробовать проследить сеанс (через настройки sqlnet.ora) и посмотреть, что записывается.

2 голосов
/ 04 марта 2010

Когда время запроса фактически истекает при использовании метода setTimeOut, с сервера oracle выдается исключение SQL с кодом ошибки Oracle ORA-01013 - user requested cancel of current operation.

Это будет означать, что операция была отменена изящно (что касается оракула / столько, сколько может оракул) - потому что это сообщение отправлено оракулом.

1 голос
/ 04 марта 2010

Я знаю, что запрос не продолжается на стороне сервера после истечения времени ожидания. Существует некоторая опция намерения / сигнала, отправляемая на сервер до или после истечения времени ожидания, чтобы указать, что сервер должен остановиться. Я проверил это, посмотрев на сервер в различных таблицах V $, чтобы увидеть, выполняется ли запрос. (V $ SESSION, V $ SQL и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...