oracle不同事务隔离级别与v$transaction flag列分析
这篇文章主要介绍“oracle不同事务隔离级别与v$transaction flag列分析”,在日常操作中,相信很多人在oracle不同事务隔离级别与v$transaction flag列分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle不同事务隔离级别与v$transaction flag列分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
前言oracle可以查询v$transaction实时了解数据库事务的执行情况,v$transaction有个列flag,引起我的注意,见下:
延伸阅读oracle数据库事务transaction锁lock模式思考之一
oracle提供2种事务隔离级别,read committed及serializable。前者是默认值。如果采用不同的事务隔离级别发起数据库事务,
v$transaction之flag有何区别呢。
不同事务隔离级别的表现read committed事务隔离级别事务隔离级别readcommitted,各种dml产生的事务flag全是3587SQL>settransactionisolationlevelreadcommittedname'tran76';Transactionset.SQL>insertintot_testselect3,3fromdual;1rowcreated.SQL>/NAMEADDRFLAG------------------------------------------------------------------tran7600000000843521C03587SQL>deletefromt_testwherea=1;1rowdeleted.SQL>/NAMEADDRFLAG------------------------------------------------------------------tran7600000000843521C03587SQL>updatet_testseta=11;2rowsupdated.SQL>/NAMEADDRFLAG------------------------------------------------------------------tran7600000000843521C03587serializable事务隔离级别
事务隔离级别serializable各种dml产生的事务的flag全是268439043SQL>settransactionisolationlevelserializablename'tran76';Transactionset.SQL>insertintot_testselect3,3fromdual;1rowcreated.SQL>selectaddr,flagfromv$transaction;ADDRFLAG--------------------------00000000840B04D8268439043SQL>updatet_testseta=11wherea=1;1rowupdated.SQL>/NAMEADDRFLAG------------------------------------------------------------------tran7600000000843521C0268439043SQL>deletefromt_test;2rowsdeleted.SQL>/NAMEADDRFLAG------------------------------------------------------------------tran7600000000843521C0268439043SQL>selectaddr,flagfromv$transaction;ADDRFLAG--------------------------00000000840B04D8268439043lock mode语句产生的事务隔离级别
locktable不会产生事务,当然也不会产生事务的flagSQL>locktablet_testinrowsharemode;Table(s)Locked.SQL>locktablet_testinrowexclusivemode;Table(s)Locked.SQL>locktablet_testinsharerowexclusivemode;Table(s)Locked.SQL>locktablet_testinexclusivemode;Table(s)Locked.SQL>locktablet_testinsharemode;Table(s)Locked.
思考
---可以对flag作文章,就可以知道事务是哪种事务隔离级别selectname,addr,flag,decode(flag,'268439043','serializable','3587','readcommitted')fromv$transactionwhereaddr=(selecttaddrfromv$sessionwheresid=76)NAMEADDRFLAGDECODE(FLAG,'2--------------------------------------------------------------------------------tran7600000000843521C0268439043serializable
到此,关于“oracle不同事务隔离级别与v$transaction flag列分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。