Level isolasi saat ini dalam oracle

10

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

paweloque
sumber
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.

Leigh Riffel
sumber
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

pengguna33489
sumber