Come ottenere l'attuale livello di isolamento della transazione (predefinito) in Oracle?
Come ottenere l'attuale livello di isolamento della transazione (predefinito) in Oracle?
Risposte:
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.
- 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