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

Tomcat có sử dụng các phiên bản đã lưu trong bộ nhớ cache của mô-đun pl / sql không?

Sự cố này xảy ra với nhóm kết nối JDBC và là sự cố bạn gặp phải với tất cả các máy chủ ứng dụng sử dụng nhóm kết nối JDBC, không chỉ Tomcat. Các nhóm kết nối sẽ giữ một số kết nối mở trong nhóm sẵn sàng cho yêu cầu tiếp theo. Nếu một gói PL / SQL đã được tham chiếu bởi kết nối và được biên dịch lại thì lần gọi tiếp theo đến gói đó sẽ gây ra lỗi ORA-06508. Điều này sẽ ảnh hưởng đến các gói ở bất kỳ đâu trong ngăn xếp cuộc gọi - không chỉ gói bạn đã gọi trực tiếp.

Để giải quyết vấn đề này, một số máy chủ ứng dụng (như Weblogic) có phương pháp kiểm tra được gọi định kỳ. Nếu quá trình kiểm tra không thành công, kết nối sẽ bị xóa khỏi nhóm hoặc được làm mới theo một cách nào đó. Tôi không chắc Tomcat có cơ chế gì.

Một cách khác để giải quyết nó là gọi dbms_session.reset_package như là cuộc gọi phương thức đầu tiên trong cuộc gọi JDBC của bạn. Thao tác này sẽ xóa trạng thái gói khỏi phiên của bạn. Cách tiếp cận này không được khuyến nghị vì nó có chi phí hiệu suất cộng với bất kỳ biến phạm vi gói nào đều được đặt lại, do đó, các khối khởi tạo gói cần được gọi lại - một lần truy cập hiệu suất khác.

Nếu bạn gặp sự cố và bạn không có cách nào để loại bỏ các kết nối kém, bạn sẽ cần phải đặt lại toàn bộ nhóm kết nối vì bất kỳ kết nối nào trong nhóm sẽ bị cùng một ngoại lệ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ mục cơ sở dữ liệu B-Tree và Bitmap

  2. Làm cách nào để đếm số lần xuất hiện của một ký tự trong giá trị Oracle varchar?

  3. Truy vấn mối quan hệ Khoá ngoại của Bảng

  4. Thiết lập tối thiểu cần thiết để triển khai ứng dụng .NET với máy khách Oracle 11 là gì?

  5. Chạy thủ tục lưu trữ trong nhà phát triển SQL?