这篇文章主要介绍“oracle不同事务隔离级别与v$transaction flag列分析”,在日常操作中,相信很多人在oracle不同事务隔离级别与v$transaction flag列分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle不同事务隔离级别与v$transaction flag列分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
双桥网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
oracle可以查询v$transaction实时了解数据库事务的执行情况,v$transaction有个列flag,引起我的注意,见下:
oracle提供2种事务隔离级别,read committed及serializable。前者是默认值。如果采用不同的事务隔离级别发起数据库事务,
v$transaction之flag有何区别呢。
事务隔离级别 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各种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 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列分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!