ODP.NET: предотвращение тайм-аутов подключения с помощью пула подключений

На одном сайте я могу подключиться к базе данных Oracle с помощью SQL Developer, оставить его в бездействии на долгое время (например,> 60 минут) и Вернись, и все в порядке. На втором сайте, если он простаивает более 5-10 минут (я точно не считал), он оставляет SQL Developer в состоянии, когда время ожидания новых операций истекает, и мне нужно вручную «отключить», а затем повторно подключиться, чтобы сделать что-нибудь полезное. Кажется, это тайм-аут соединения на втором сайте, и я не знаю, что его вызывает (и я хотел бы знать, как его отключить, хотя это не мой главный вопрос).

Моя программа использует ODP.NET и обрабатывает данные, которые поступают рывками. Каждые 30 минут (для обсуждения) он будет получать кучу данных для обработки, которая будет включать несколько повторных подключений. Он также использует пул соединений. Я настроил пул подключений на использование времени жизни 5 минут.

На втором сайте (а не на первом) я вижу, что моя программа будет получать исключения тайм-аута подключения (например, ORA-03113) на начало каждого всплеска данных. Я считаю, что происходит то, что во время всплеска данных пул соединений используется так, как задумано. В конце спурта проверяется "Время жизни соединения", и соединение не слишком старое, поэтому оно остается в пуле соединений. Затем, через 30 минут, когда поступают новые данные, соединение извлекается из пула (и не проверяется на время жизни или тайм-аут) и используется, и время ожидания истекает, как я вижу в SQL Developer.

Как я могу избежать тайм-аута соединения, но по-прежнему использовать пул соединений во время всплесков? Из документации (и моего опыта) видно, что соединение проверяется на время жизни только тогда, когда оно попадает в пул, а не когда выходит.

8
задан Andy Jacobs 9 December 2010 в 14:22
поделиться