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