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

Cách tránh hai luồng khác nhau đọc các hàng giống nhau từ DB (Hibernate và Oracle 10g)

Bạn cần sử dụng PESSIMISTIC_WRITE tại thời điểm truy vấn:

Query q = session
    .createQuery("from MyObject n where n.state = 'NEW'")
    .setLockOptions(new LockOptions(LockMode.PESSIMISTIC_WRITE));
List<MyObject> list = (List<MyObject>) q.list();

Khóa các đối tượng cha là đủ. Bế tắc sẽ không nhất thiết xảy ra. Bạn có thể gặp lỗi thu thập khóa nếu chuỗi giữ khóa không nhả nó ra trước khi chuỗi khác hết thời gian chờ.

Vì bạn đang sử dụng Oracle, đây là cách CHỌN CẬP NHẬT hoạt động:

Vì vậy, nếu T1 có được một khóa độc quyền trên một số hàng, T2 sẽ không thể đọc các bản ghi đó cho đến khi T1 cam kết hoặc quay lại. Nếu T2 sử dụng READ_UNCOMMITTED mức cô lập, thì T2 sẽ không bao giờ chặn trên các bản ghi khóa, vì nó chỉ đơn giản sử dụng các bản ghi hoàn tác để cấu trúc lại dữ liệu như khi bắt đầu truy vấn. Trái ngược với tiêu chuẩn SQL, Oracle READ_UNCOMMITTED sẽ:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo trình kích hoạt trong Oracle Express

  2. tham gia với tra cứu và theo nhóm

  3. Làm cách nào để lấy giá trị CDATA từ xml

  4. Làm thế nào để cài đặt Universal Oracle Installer trên Ubuntu?

  5. Cách lặp qua danh sách được phân tách trong Oracle PLSQL