На одном сайте я могу подключиться к базе данных Oracle с помощью SQL Developer, оставить ее в бездействии на долгое время (например,> 60 минут) и вернуться, и все в порядке. На втором сайте, если он простаивает более 5-10 минут (я точно не подсчитал), он оставляет SQL Developer в состоянии, когда новые операции истекают по таймауту, и мне нужно вручную «Отключиться», а затем повторно подключиться по порядку. делать что-нибудь полезное. Похоже, это тайм-аут соединения на втором сайте, и я не знаю, что его вызывает (и я хотел бы знать, как его отключить, хотя это не мой главный вопрос).
Моя программа использует ODP.NET и обрабатывает данные, которые поступают рывками. Каждые 30 минут (для обсуждения) он будет получать кучу данных для обработки, которая будет включать в себя несколько повторных подключений. Он также использует пул соединений. Я установил для пула подключений время жизни 5 минут.
На втором сайте (а не на первом) я вижу, что моя программа будет получать исключения тайм-аута соединения (например, ORA-03113) в начале каждого всплеска данных. Я считаю, что происходит то, что во время всплеска данных пул соединений используется так, как задумано. В конце спурта проверяется "Время жизни соединения", и соединение не слишком старое, поэтому оно остается в пуле соединений. Затем, через 30 минут, когда поступают новые данные, соединение извлекается из пула (и не проверяется на время жизни или тайм-аут) и используется, и время ожидания истекает, как я вижу в SQL Developer.
Как я могу избежать тайм-аута подключения, но при этом использовать пул подключений во время всплесков? Из документации (и моего опыта) кажется, что соединение проверяется на время жизни только тогда, когда оно попадает в пул, а не когда выходит.