程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle如何保證事務的ACID原則--oracle核心技術讀書筆記二

oracle如何保證事務的ACID原則--oracle核心技術讀書筆記二

編輯:Oracle教程

oracle如何保證事務的ACID原則--oracle核心技術讀書筆記二


在事務中有四個通用的原則是所有數據庫都必須遵守的,簡稱ACID原則,下面簡單概述一下oracle是怎樣實現這四個原則的。

一. 原子性(Atomicity):一個事務要麼全部執行,要麼全部都不執行

在oracle中,當我們做一次變更的時候,系統會自動創建一條undo記錄來描述怎樣撤銷這次變更。也就是說,當執行到一個事務的中間時,如果有其他用戶想訪問我們更改過的數據,他必須使用undo記錄來查看變更前的舊數據,即只有當我們提交這個事務後,所做的更改才能被他人看到。這樣就可以確保,其他用戶要麼能看到我們所做的更改,要麼什麼更改都看不到。另外一種情況,如果我們這個事務失敗,我們也可以根據undo裡面的信息將我們所做的修改回退。保證要麼全部成功,要麼全部失敗。

二. 一致性(Consistency):一個事務的運行並不改變數據庫中數據的一致性

假設一個事務需要進行3種更新操作,某一時刻執行成功了2種更新操作。這個時候數據庫中的數據不是一致性的狀態,因為還有第三種更新操作沒有執行。假如這個時候,別人看到了我們執行成功的2種更新操作後的結果,那就破壞了數據的一致性。oracle中由於undo的存在,其他用戶無法看到事務的增量應用(也就是執行成功的2種更新操作),也就是無法看到這個不合法的臨時狀態。他們要麼看到老狀態,要麼看到新狀態,沒有中間態。

三. 獨立性(Isolation): 一個事務不能看到另一個沒有提交的事務的執行結果

從第一點就可以看出,oracle通過undo能保證其他用戶看不到我們事務所做的修改,在我們提交之前。其他事務只能從undo裡面去尋找以前舊版本的數據,而非我們事務改變了的新數據。

四. 持久性(Durability): 一旦事務成功,數據的修改是永久的

該原則突出了oracle重做日志的優勢。在oracle中,事務一旦提交,oracle就會將重做日志順序地寫入到重做日志文件。而不是去磁盤持久化我們這個事務所做的修改。比如,一個事務修改了100條數據,假設這100條數據是隨機在磁盤的不同地方,那一旦事務提交,我們就得花費大量時間去磁盤尋找我們需要修改的數據,並將其修改。oracle沒有這樣做。oracle只是自己生成一系列重做日志(描述數據的修改),然後順序寫入磁盤的重做日志文件,寫入成功即代表著這個事務提交成功,即使修改還沒有真正持久化到磁盤。假設這個時候突然斷電,磁盤的數據還沒有修改為正確的數據,但是事務已經成功了,怎麼辦呢。oracle在下次啟動的時候會自動讀取重做日志文件,將沒有持久化到磁盤的修改,再做一遍,將修改持久化到數據庫,從而保證提交的事務,數據的修改是永遠的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved