Подтвердить что ты не робот

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

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

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

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

Спасибо

4b9b3361

Ответ 2

В соответствии с Часто задаваемые вопросы по Oracle JDBC

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

Ответ 3

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

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

Ответ 4

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