Oracle vytvoří kurzor pro každou sadu výsledků a uvolní jej při zavření sady výsledků (jdbc ResultSet.close() nebo podobně). Výchozích 50 otevřených kurzorů na relaci je dostačující pro každou dobře navrženou aplikaci (když jsem to změřil, a v produkčním režimu se to nikdy nezvýšilo nad 20).
Měli byste zkontrolovat, jak přepnout do režimu spánku, aby se po načtení uzavřely sady výsledků. Obecně si nedokážu představit, co by relace měla dělat, pokud opravdu vyžaduje 1000 otevřených kurzorů. Nikdy jsem neviděl, že max_open_cursors je nastaveno na více než 1000, takže si myslím, že to stačí i pro špatně navržené aplikace (ale... ve střízlivém faktu neexistuje hranice dokonalosti a nikdy nepoužívám Hibernate).
Každý kurzor znamená určitou paměť, takže zvýšení max_open_cursors není řešením s nulovou cenou.