Как тайм-аут запроса JDBC Oracle реализован?

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

Это реализовано в самом драйвере на стороне клиента? Новый поток порождают и присоединяются? Или драйвер JDBC просто отправляет параметр Oracle, и затем это осуществляет тайм-аут?

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

Спасибо

21
задан APC 4 March 2010 в 06:46
поделиться

4 ответа

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

12
ответ дан 29 November 2019 в 21:24
поделиться

Когда время ожидания запроса истекает при использовании метода setTimeOut, с сервера Oracle генерируется исключение SQL с кодом ошибки Oracle ORA-01013 - пользователь запросил отмену текущей операции .

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

2
ответ дан 29 November 2019 в 21:24
поделиться

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

1
ответ дан 29 November 2019 в 21:24
поделиться

Согласно Oracle JDBC FAQ

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

15
ответ дан 29 November 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: