Niveau d'isolement actuel dans Oracle

10

Comment obtenir le niveau d'isolation de transaction actuel (par défaut) dans Oracle?

paweloque
la source
Si vous recherchez le niveau d'isolement actuel d'une session, consultez cette question SO: Comment pouvez-vous voir le niveau d'isolement des transactions utilisé par une session Oracle arbitraire.
Vincent Malgrat
Recherchez-vous le niveau d'isolement par défaut pour les transactions d'une session ou le niveau d'isolement de la transaction en cours?
Leigh Riffel

Réponses:

6

En utilisant la requête de la réponse SO référencée par Vincent Malgrat, voici comment obtenir le niveau d'isolement de transaction pour la transaction en cours:

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 vous n'êtes pas déjà dans une transaction, vous pouvez en démarrer une avec ce qui suit:

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

Il semble qu'il y aurait un moyen plus simple que cela. Je ne sais pas comment obtenir le niveau d'isolement par défaut pour la session si c'est ce que vous recherchez.

Leigh Riffel
la source
5

- J'utilise quelque chose comme ci-dessous

avec q1 comme (sélectionner un nom distinct, isdefault, valeur, décoder (valeur, 'sérialisable', SID, null) SID de V $ SES_OPTIMIZER_ENV où inférieur (nom) comme '% isolation%' commander par nom) sélectionner q1. *, vs .status, vs.username, vs.OSUSER, vs.MACHINE, vs.TERMINAL, vs.PROGRAM from q1, v $ session vs where q1.sid = vs.sid (+);

-- Cordialement. - AZ

user33489
la source