數據庫事務(ACID)中的I指隔離性(isolation):未完成的(也就是未提交的)事務必須不可視。在某個事務進行期間,只有執行該事務的一個會話能看到所做的變化。
oracle是通過使用還原段來實現隔離性的。還原段(undo)的目的:(1)事務恢復;(2)事務回滾;(3)讀一致性

NAME???????????????????????????VALUE
-- ----------------------------?------------------------------
undo_management????????????????AUTO
undo_tablespace????????????????UNDO
undo_retention????????????????? 900?????????????????
下面通過update的過程來分析隔離性的實現。
?
? 首先,在DML操作影響的所有記錄以及關聯索引鍵上放置鎖定;接下來會生成重做,此時服務器進程在日志緩沖區中寫入即將應用于指定數據塊的變化。這個重做生成操作應用于數據塊的變化和撤銷塊的變化,如果列是索引的一部分,也將索引的變化以及保護索引變化的撤銷塊變化寫入日志緩沖區。在生成重做后,完成(1)?(2)操作。然后,如上圖片如示進行。
?
PS:我開始的時候一直不能理解隔離性,即如果沒有commit的話,只有執行update的session才能看到變化,其它的session還是看到原來的值。更疑惑的是,當執行commit(只會觸發LGWR,并不會觸發DBWR)的時候,數據并沒有真正寫入db files,而其它的session居然可以看到更新的值。直至,了解到撤銷段和重定向的使用的時候,才解惑了。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
