Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana menghindari dua utas berbeda membaca baris yang sama dari DB (Hibernate dan Oracle 10g)

Anda harus menggunakan PESSIMISTIC_WRITE pada waktu kueri:

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

Mengunci objek induk sudah cukup. Kebuntuan belum tentu terjadi. Anda mungkin mendapatkan kegagalan akuisisi kunci jika utas yang menahan kunci tidak melepaskannya sebelum utas lain dari waktu tunggu habis.

Karena Anda menggunakan Oracle, beginilah caranya PILIH UNTUK PEMBARUAN bekerja:

Jadi jika T1 memperoleh kunci eksklusif pada beberapa baris, T2 tidak akan dapat membaca catatan tersebut sampai T1 melakukan atau melakukan roll-back. Jika T2 menggunakan READ_UNCOMMITTED tingkat isolasi, maka T2 tidak akan pernah memblokir catatan kunci, karena hanya menggunakan undo log untuk merekonstruksi data seolah-olah ketika kueri dimulai. Berbeda dengan standar SQL, Oracle READ_UNCOMMITTED akan:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_VALUE() Fungsi di Oracle

  2. Fungsi ORDER BY tidak berfungsi di Oracle

  3. Mengapa pembaruan JDBC saya tidak berfungsi?

  4. Dapatkan level Hierarki dan semua referensi node di Oracle

  5. ORA-00102:ambil di luar urutan C++