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.