oracle資料庫事務不同事務隔離級別與v$transaction flag列思考

wisdomone1發表於2019-11-14

前言

      oracle可以查詢v$transaction實時瞭解資料庫事務的執行情況,v$transaction有個列flag,引起我的注意,見下


延伸閱讀  
oracle資料庫事務transaction鎖lock模式思考之一



       oracle提供2種事務隔離級別,read committed及serializable。前者是預設值。如果採用不同的事務隔離級別發起資料庫事務,

v$transaction之flag有何區別呢。

不同事務隔離級別的表現

read committed事務隔離級別

事務隔離級別 read committed,各種dml產生的事務 flag全是3587
SQL> set transaction isolation level  read committed  name 'tran76';
Transaction set.
SQL> insert into t_test select 3,3 from dual;
1 row created.
SQL> /
NAME					 ADDR			FLAG
---------------------------------------- ---------------- ----------
tran76					 00000000843521C0	3587
SQL> delete from t_test where a=1;
1 row deleted.
SQL> /
NAME					 ADDR			FLAG
---------------------------------------- ---------------- ----------
tran76					 00000000843521C0	3587
SQL> update t_test set a=11;
2 rows updated.
SQL> /
NAME					 ADDR			FLAG
---------------------------------------- ---------------- ----------
tran76					 00000000843521C0	3587

serializable事務隔離級別

事務隔離級別serializable各種dml產生的事務的flag全是268439043
SQL> set transaction isolation level  serializable name 'tran76';
Transaction set.
SQL> insert into t_test select 3,3 from dual;
1 row created.
SQL> select addr,flag from v$transaction;
ADDR		       FLAG
---------------- ----------
00000000840B04D8  268439043
SQL> update t_test set a=11 where a=1;
1 row updated.
SQL> /
NAME					 ADDR			FLAG
---------------------------------------- ---------------- ----------
tran76					 00000000843521C0  268439043
SQL> delete from t_test;
2 rows deleted.
SQL> /
NAME					 ADDR			FLAG
---------------------------------------- ---------------- ----------
tran76					 00000000843521C0  268439043
SQL> select addr,flag from v$transaction;
ADDR		       FLAG
---------------- ----------
00000000840B04D8  268439043

lock mode語句產生的事務隔離級別

lock table不會產生事務,當然也不會產生事務的flag
SQL> lock table t_test in row share mode;
Table(s) Locked.
SQL> lock table t_test in row exclusive mode;
Table(s) Locked.
SQL> lock table t_test in share row exclusive mode;
Table(s) Locked.
SQL> lock table t_test in exclusive mode;
Table(s) Locked.
SQL> lock table t_test in share mode;
Table(s) Locked.



思考

---可以對flag作文章,就可以知道事務是哪種事務隔離級別
select name,addr,flag,decode(flag,'268439043','serializable','3587','read committed') 
from v$transaction where addr=(select taddr from v$session where sid=76)
NAME					 ADDR			FLAG DECODE(FLAG,'2
---------------------------------------- ---------------- ---------- --------------
tran76					 00000000843521C0  268439043 serializable


聯絡方式

oracle資料庫事務不同事務隔離級別與v$transaction flag列思考

oracle資料庫事務不同事務隔離級別與v$transaction flag列思考


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-2664075/,如需轉載,請註明出處,否則將追究法律責任。

相關文章