189 8069 5689

oracle不同事务隔离级别与v$transactionflag列分析-创新互联

这篇文章主要介绍“oracle不同事务隔离级别与v$transaction flag列分析”,在日常操作中,相信很多人在oracle不同事务隔离级别与v$transaction flag列分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle不同事务隔离级别与v$transaction flag列分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

武汉ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

前言

      oracle可以查询v$transaction实时了解数据库事务的执行情况,v$transaction有个列flag,引起我的注意,见下:

oracle不同事务隔离级别与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$transactionflag列分析-创新互联
当前网址:http://jkwzsj.com/article/ddocjg.html

其他资讯