Level isolasi saat ini dalam oracle


10

Bagaimana cara mendapatkan tingkat isolasi transaksi (default) saat ini di oracle?


Jika Anda mencari tingkat isolasi sesi saat ini, lihat pertanyaan SO ini: Bagaimana Anda bisa melihat tingkat isolasi transaksi apa yang digunakan sesi nubuat arbitrer.
— Vincent Malgrat

Apakah Anda mencari tingkat isolasi standar untuk transaksi dalam satu sesi atau tingkat isolasi dari transaksi saat ini sedang berlangsung?
— Leigh Riffel

Jawaban:


6

Menggunakan kueri dari jawaban SO Vincent Malgrat direferensikan, berikut adalah bagaimana Anda bisa mendapatkan tingkat isolasi transaksi untuk transaksi yang sedang berlangsung:

SELECT s.sid, s.serial#,
   CASE BITAND(t.flag, POWER(2, 28))
      WHEN 0 THEN 'READ COMMITTED'
      ELSE 'SERIALIZABLE'
   END AS isolation_level
FROM v$transaction t 
JOIN v$session s ON t.addr = s.taddr AND s.sid = sys_context('USERENV', 'SID');

Jika Anda belum melakukan transaksi, Anda dapat memulainya dengan yang berikut:

declare 
   trans_id Varchar2(100);
begin
   trans_id := dbms_transaction.local_transaction_id( TRUE );
end;
/

Sepertinya akan ada cara yang lebih mudah dari ini. Saya tidak tahu bagaimana cara mendapatkan tingkat isolasi standar untuk sesi ini jika itu yang Anda cari.


5

- Saya menggunakan sesuatu seperti di bawah ini

dengan q1 sebagai (pilih nama berbeda, isdefault, nilai, decode (nilai, 'serializable', SID, null) SID dari V $ SES_OPTIMIZER_ENV di mana lebih rendah (nama) seperti '% isolasi%' diurutkan berdasarkan nama) pilih q1. *, vs .status, vsusername, vs.OSUSER, vs.MACHINE, vs.TERMINAL, vs.PROGRAM dari q1, v $ session vs di mana q1.sid = vs.sid (+);

- Salam. - AZ

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.