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在下次啟動的時候會自動讀取重做日誌檔案,將沒有持久化到磁碟的修改,再做一遍,將修改持久化到資料庫,從而保證提交的事務,資料的修改是永遠的。