使用 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