Po wielu testach naprawiliśmy ten problem. Jest to połączenie tego, jak używaliśmy frameworka Spring, klienta Oracle i Oracle DB. Tworzyliśmy nowe SimpleJDBCCall, które wykorzystywały wywołania metadanych klienta Oracle JDBC, które były zwracane jako kursory, które nie były zamykane i czyszczone. Uważam to za błąd w frameworku Spring JDBC w sposobie, w jaki wywołuje metadane, ale potem nie zamyka kursora. Spring powinien skopiować metadane z kursora i zamknąć je poprawnie. Nie zawracałem sobie głowy otwieraniem wydania jira ze spring, ponieważ jeśli zastosujesz najlepsze praktyki, błąd nie zostanie ujawniony.
Modyfikowanie OPEN_CURSORS lub innych parametrów jest złym sposobem rozwiązania tego problemu i po prostu opóźnia jego pojawienie się.
Pracowaliśmy nad tym/naprawiliśmy, przenosząc SimpleJDBCCall do pojedynczego DAO, więc dla każdego wywołanego przez nas procesu oracle jest otwarty tylko jeden kursor. Te kursory są otwarte przez cały okres użytkowania aplikacji – co uważam za błąd. Dopóki OPEN_CURSORS jest większe niż liczba obiektów SimpleJDBCCall, nie będzie kłopotów.