Livello di isolamento attuale in oracolo


10

Come ottenere l'attuale livello di isolamento della transazione (predefinito) in Oracle?


Se stai cercando l'attuale livello di isolamento di una sessione, vedi questa domanda SO: Come puoi vedere quale livello di isolamento della transazione sta usando una sessione di Oracle arbitraria.
Vincent Malgrat,

Stai cercando il livello di isolamento predefinito per le transazioni in una sessione o il livello di isolamento della transazione corrente in corso?
Leigh Riffel,

Risposte:


6

Utilizzando la query dalla risposta SO a cui fa riferimento Vincent Malgrat, ecco come ottenere il livello di isolamento della transazione in corso:

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');

Se non si è già in una transazione, è possibile avviarne una con quanto segue:

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

Sembra che ci sarebbe un modo più semplice di così. Non so come ottenere il livello di isolamento predefinito per la sessione se è quello che stai cercando.


5

- Sto usando qualcosa come di seguito

con q1 come (selezionare nome distinto, isdefault, valore, decodifica (valore, 'serializzabile', SID, null) SID da V $ SES_OPTIMIZER_ENV dove inferiore (nome) come '% isolamento%' ordina per nome) selezionare q1. *, vs .status, vs.username, vs.OSUSER, vs.MACHINE, vs.TERMINAL, vs.PROGRAM da q1, v $ session vs dove q1.sid = vs.sid (+);

-- Saluti. - AZ

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.