oracle 中的当前隔离级别

paw*_*que 11 oracle transaction

如何在oracle中获取当前(默认)事务隔离级别?

Lei*_*fel 7

使用 Vincent Malgrat 引用的 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');
Run Code Online (Sandbox Code Playgroud)

如果您还没有参与交易,您可以从以下开始:

declare 
   trans_id Varchar2(100);
begin
   trans_id := dbms_transaction.local_transaction_id( TRUE );
end;
/
Run Code Online (Sandbox Code Playgroud)

似乎有比这更简单的方法。如果这是您要找的,我不知道如何获得会话的默认隔离级别。


小智 6

- 我正在使用类似下面的东西

使用 q1 作为(选择不同的名称,isdefault,value,decode(value,'serializable',SID,null) SID from V$SES_OPTIMIZER_ENV where lower(name) like '%isolation%' order by name )选择 q1.* ,vs .status,vs.username,vs.OSUSER,vs.MACHINE,vs.TERMINAL,vs.PROGRAM from q1, v$session vs where q1.sid=vs.sid(+);

- 问候。-- AZ