Tham số init.ora open_cursors
xác định tối đa các con trỏ được mở mà một phiên có thể có cùng một lúc. Nó có giá trị mặc định là 50. Nếu ứng dụng vượt quá con số này, lỗi "ORA-01000:vượt quá con trỏ mở tối đa" sẽ xuất hiện.
Do đó, bắt buộc phải đóng các tài nguyên JDBC khi chúng không còn cần thiết nữa, cụ thể là java.sql.ResultSet và java.sql.Statement. Nếu chúng không được đóng, ứng dụng có một rò rỉ tài nguyên.
Trong trường hợp sử dụng lại đối tượng Kết nối, bạn phải biết thực tế là các con trỏ tiên tri đã mở được giữ ở trạng thái mở và được sử dụng miễn là kết nối tồn tại và giao dịch vẫn chưa kết thúc. Khi ứng dụng cam kết, các con trỏ đã mở sẽ được giải phóng.
Do đó, là một nhà thiết kế ứng dụng, bạn cần biết ước tính sơ bộ về các con trỏ mở cần thiết cho giao dịch phức tạp nhất của mình.
Khó khăn nằm ở chỗ không có khả năng xem thông số nội bộ của oracle (v $ open_cursor, v $ sesstat, v.v.) để hiển thị sự khác biệt giữa con trỏ đã mở, con trỏ có thể sử dụng lại và con trỏ đã mở, vẫn bị chặn (không thể sử dụng lại!) một ResulSet hoặc Tuyên bố chưa được tiết lộ. Nếu bạn đóng tất cả các đối tượng Statement và ResultSet trong khối cuối cùng của mình, ứng dụng của bạn hoàn toàn ổn.
Việc điều chỉnh tham số init.ora hoạt động như thế này (ứng dụng của chúng tôi cần tối đa 800 con trỏ)
ALTER SYSTEM SET open_cursors = 800 SCOPE=BOTH;