oracle 隔离性(isolation)

系统 1868 0

  数据库事务(ACID)中的I指隔离性(isolation):未完成的(也就是未提交的)事务必须不可视。在某个事务进行期间,只有执行该事务的一个会话能看到所做的变化。

  oracle是通过使用还原段来实现隔离性的。还原段(undo)的目的:(1)事务恢复;(2)事务回滚;(3)读一致性

代码
SQL > select  name,value  from  v$parameter  where  name  like   ' %undo% ' ;

NAME                           VALUE
-- ---------------------------- ------------------------------
undo_management                AUTO
undo_tablespace                UNDO
undo_retention                 
900                 

  下面通过update的过程来分析隔离性的实现。

  oracle 隔离性(isolation)

   首先,在DML操作影响的所有记录以及关联索引键上放置锁定;接下来会生成重做,此时服务器进程在日志缓冲区中写入即将应用于指定数据块的变化。这个重做生成操作应用于数据块的变化和撤销块的变化,如果列是索引的一部分,也将索引的变化以及保护索引变化的撤销块变化写入日志缓冲区。在生成重做后,完成(1) (2)操作。然后,如上图片如示进行。

 

PS:我开始的时候一直不能理解隔离性,即如果没有commit的话,只有执行update的session才能看到变化,其它的session还是看到原来的值。更疑惑的是,当执行commit(只会触发LGWR,并不会触发DBWR)的时候,数据并没有真正写入db files,而其它的session居然可以看到更新的值。直至,了解到撤销段和重定向的使用的时候,才解惑了。

 

oracle 隔离性(isolation)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论