Как выполняется тайм-аут запроса Oracle JDBC?
Мне было любопытно, как тонкий клиент Oralce JDBC реализует тайм-аут запроса. Это можно установить, вызвав java.sql.Statement setQueryTimeout (int seconds) Метод.
Это реализовано в самом драйвере на стороне клиента? Это новая нить возникла и присоединилась? Или просто драйвер JDBC отправить параметр Oracle, а затем принудительно выполнить тайм-аут?
После достижения таймаута, какие ресурсы на клиенте и база данных выпущена, и которые висят вокруг? Продолжает ли Oracle для выполнения запроса, даже если клиент отказался от него или он прекращено? Есть ли объект курсора на стороне клиента?
Спасибо
Ответы
Ответ 2
В соответствии с Часто задаваемые вопросы по Oracle JDBC
Задержка тайм-аута Statement. Этот поток создается, если вы выполняете какой-либо оператор с таймаутом. Создается только один поток независимо от количества операторов или соединений. Этот поток длится время жизни виртуальной машины.
Ответ 3
Когда запрос действительно выдает время при использовании метода setTimeOut, исключение SQL с кодом ошибки Oracle ORA-01013 - user requested cancel of current operation
выдается с сервера oracle.
Это означало бы, что операция была отменена изящно (насколько оракула затронута/как может много оракула) - потому что это оракул отправляет это сообщение.
Ответ 4
Я знаю, что запрос не продолжается на стороне сервера при достижении таймаута. Существует некоторая опция намерения/сигнала, отправленная на сервер до или после достижения таймаута, чтобы указать, что сервер должен остановиться. Я проверил это, посмотрев на сервере в различных таблицах V $, чтобы узнать, работает ли запрос. (V $SESSION, V $SQL и т.д.)