Текущий уровень изоляции в оракуле

10

Как получить текущий (по умолчанию) уровень изоляции транзакции в Oracle?

paweloque
источник
Если вы ищете текущий уровень изоляции сеанса, посмотрите на этот вопрос SO: Как вы можете увидеть, какой уровень изоляции транзакций использует произвольный сеанс оракула.
Винсент Малграт
Вы ищете уровень изоляции по умолчанию для транзакций в сеансе или уровень изоляции текущей транзакции?
Ли Риффель

Ответы:

6

Используя запрос из SO-ответа, на который ссылался Винсент Малграт, вот как вы можете получить уровень изоляции транзакции для выполняемой транзакции:

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

Если вы еще не участвуете в транзакции, вы можете начать ее со следующего:

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

Кажется, что есть более простой способ, чем этот. Я не знаю, как получить уровень изоляции по умолчанию для сеанса, если это то, что вы ищете.

Ли Риффель
источник
5

- Я использую что-то вроде ниже

с q1 как (выберите отдельное имя, isdefault, значение, декодируйте (значение, 'serializable', SID, null) SID из V $ SES_OPTIMIZER_ENV, где нижний (имя), как "% изоляция%", порядок по имени) выберите q1. *, vs .status, vs.username, vs.OSUSER, vs.MACHINE, vs.TERMINAL, vs.PROGRAM из q1, v $ session против vs, где q1.sid = vs.sid (+);

-- С уважением. - AZ

user33489
источник