Nível atual de isolamento no oracle

10

Como obter o nível de isolamento da transação atual (padrão) no oracle?

paweloque
fonte
Se você estiver procurando pelo nível de isolamento atual de uma sessão, consulte esta pergunta do SO: Como você pode ver qual nível de isolamento de transação uma sessão arbitrária do Oracle está usando.
Vincent Malgrat
Você está procurando o nível de isolamento padrão para transações em uma sessão ou o nível de isolamento da transação atual em andamento?
Leigh Riffel

Respostas:

6

Usando a consulta da resposta SO mencionada por Vincent Malgrat, veja como você pode obter o nível de isolamento da transação em andamento:

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 você ainda não estiver em uma transação, poderá iniciar uma com o seguinte:

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

Parece que haveria uma maneira mais fácil do que isso. Não sei como obter o nível de isolamento padrão para a sessão, se é isso que você está procurando.

Leigh Riffel
fonte
5

- Estou usando algo como abaixo

com q1 como (selecione nome distinto, isdefault, value, decode (valor, 'serializable', SID, null) SID de V $ SES_OPTIMIZER_ENV onde inferior (nome) como '% isolamento%' ordem por nome) selecione q1. *, vs .status, vs.username, vs.OSUSER, vs.MACHINE, vs.TERMINAL, vs.PROGRAM da q1, v $ session vs em que q1.sid = vs.sid (+);

-- Saudações. - AZ

user33489
fonte