Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle không xóa con trỏ sau khi đóng tập kết quả

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 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01618

  2. Hàm JSON_OBJECT () trong Oracle

  3. Sự khác biệt về cách xử lý khoảng trắng giữa Oracle và SQL Server

  4. Truy xuất danh sách các thủ tục / chức năng riêng tư từ một phần thân gói

  5. kiểm tra ngày hợp lệ được khai báo trong varchar2