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

Oracle tertinggal antara komit dan pilih

Secara default, perilaku yang Anda gambarkan seharusnya tidak mungkin - perubahan yang dibuat dalam transaksi yang dilakukan akan segera tersedia untuk semua sesi. Namun, ada pengecualian:

  1. Apakah Anda menggunakan salah satu opsi MENULIS dalam perintah COMMIT? Jika tidak, konfirmasikan nilai parameter inisialisasi COMMIT_WRITE Anda. Jika salah satu menggunakan "MENULIS BATCH" atau terutama "MENULIS BATCH SEKARANG", Anda bisa membuka diri untuk masalah konkurensi. "MENULIS BATCH SEKARANG" biasanya akan digunakan dalam kasus di mana kecepatan transaksi tulis Anda lebih penting daripada kemungkinan masalah konkurensi. Jika parameter inisialisasi Anda menggunakan varian "MENULIS", Anda dapat menggantinya berdasarkan transaksi dengan menentukan klausa SEGERA di komit Anda (lihat COMMIT)

  2. Apakah transaksi yang mencoba membaca data meminta SET TRANSACTION sebelum transaksi lain melakukan? Menggunakan SET TRANSACTION untuk menentukan SERIALIZATION LEVEL READ ONLY atau SERIALIZABLE akan mengakibatkan transaksi tidak melihat perubahan yang terjadi dari sesi commit lainnya yang terjadi setelah pemanggilan SET TRANSACTION (lihat SET TRANSACTION)

edit:Saya melihat bahwa Anda menggunakan kelas DataSource. Saya tidak akrab dengan kelas ini - saya menganggap ini adalah sumber daya berbagi koneksi. Saya menyadari bahwa desain aplikasi Anda saat ini mungkin tidak memudahkan untuk menggunakan objek koneksi yang sama di seluruh alur kerja Anda (langkah-langkahnya mungkin dirancang untuk beroperasi secara independen, dan Anda tidak membangun fasilitas untuk meneruskan objek koneksi dari satu langkah ke langkah lainnya. berikutnya), tetapi Anda harus memverifikasi bahwa objek koneksi yang dikembalikan ke objek DataSource adalah "bersih", terutama yang berkaitan dengan transaksi terbuka. Mungkin saja Anda tidak menjalankan TRANSAKSI SET dalam kode Anda, tetapi konsumen DataSource lain di tempat lain mungkin melakukannya, dan mengembalikan koneksi ke sumber data dengan sesi masih dalam mode SERIALIZABLE atau READ ONLY. Saat berbagi koneksi, semua koneksi harus dibatalkan sebelum diserahkan ke konsumen baru.

Jika Anda tidak memiliki kontrol atau visibilitas terhadap perilaku kelas DataSource, Anda mungkin ingin mencoba menjalankan ROLLBACK pada koneksi yang baru diperoleh untuk memastikan tidak ada transaksi tersisa yang telah dibuat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT SUM mengembalikan baris ketika tidak ada catatan

  2. PL/SQL:bagaimana cara meminta input pengguna dalam suatu prosedur?

  3. secara terprogram memeriksa koneksi terbuka di JDBC

  4. Pertarungan Urutan RAC

  5. Stempel Waktu Hibernasi dengan Zona Waktu