Nivel de aislamiento actual en oráculo

10

¿Cómo obtener el nivel de aislamiento de transacción actual (predeterminado) en Oracle?

paweloque
fuente
Si está buscando el nivel de aislamiento actual de una sesión, vea esta pregunta SO: ¿Cómo puede ver qué nivel de aislamiento de transacción está utilizando una sesión de Oracle arbitraria?
Vincent Malgrat
¿Está buscando el nivel de aislamiento predeterminado para las transacciones en una sesión o el nivel de aislamiento de la transacción actual en curso?
Leigh Riffel

Respuestas:

6

Usando la consulta de la respuesta SO a la que hizo referencia Vincent Malgrat, así es como puede obtener el nivel de aislamiento de la transacción en curso:

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

Si aún no está en una transacción, puede comenzar una con lo siguiente:

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

Parece que habría una manera más fácil que esto. No sé cómo obtener el nivel de aislamiento predeterminado para la sesión si eso es lo que está buscando.

Leigh Riffel
fuente
5

- Estoy usando algo como abajo

con q1 como (seleccione un nombre distinto, es predeterminado, valor, decodificación (valor, 'serializable', SID, nulo) SID de V $ SES_OPTIMIZER_ENV donde menor (nombre) como '% aislamiento%' ordenar por nombre) seleccione q1. *, vs .status, vs.username, vs.OSUSER, vs.MACHINE, vs.TERMINAL, vs.PROGRAM from q1, v $ session vs where q1.sid = vs.sid (+);

-- Saludos. - AZ

usuario33489
fuente