保證數據庫數據的可靠性。數據庫
一個簡單的例子:併發
在扣除餘額到餘額增長的步驟之間,若是出現了系統性的故障,硬件故障,致使整個流程沒有順利完成,就會致使錯帳。atom
簡單分析可知出錯是由於整個流程並非原子性的,或者說,想要完成原子性,可是沒有對中間錯誤發生的預案。日誌
事務的基本特性有四個特性,ACID,保證了事務的原子性,一致性,永久性,隔離性。對象
事務被視爲不可分割的最小單元,事務的全部操做要麼所有提交成功,要麼所有失敗回滾。隊列
回滾能夠用回滾日誌(Undo Log)來實現,回滾日誌記錄着事務所執行的修改操做,在回滾時反向執行這些修改操做便可。事務
數據庫在事務執行先後都保持一致性狀態。在一致性狀態下,全部事務對同一個數據的讀取結果都是相同的。若是出問題可能會致使不可重複讀,幻影讀等問題。ci
一個事務所作的修改在最終提交之前,對其它事務是不可見的。在併發的時候使用鎖機制來保證隔離性。it
一旦事務提交,則其所作的修改將會永遠保存到數據庫中。即便系統發生崩潰,事務執行的結果也不能丟失。io
系統發生崩潰能夠用重作日誌(Redo Log)進行恢復,從而實現持久性。與回滾日誌記錄數據的邏輯修改不一樣,重作日誌記錄的是數據頁的物理修改。
事務的目的是保障在任何狀況下,無論是正常運行仍是發生了系統故障,不管是單用戶,串行執行仍是多用戶併發執行都要保證事務的執行。
關於鎖和併發的問題放在下一章講 [鎖與併發](./數據庫概論 (八))
日誌文件是用來記錄事務對數據庫的更新操做的文件,日誌每每以記錄爲最小單位,或者以數據庫定義的數據塊爲最小單位。
重點是爲了記錄:哪一個事務改變了哪一個數據塊。
並非全部的操做都要寫日誌文件,只有在要把數據寫到數據庫中的時候才須要先寫日誌文件,再寫數據庫
由於能夠經過日誌文件恢復UNDO失敗的數據庫操做,若是先寫數據庫那麼若是出現了錯誤就沒有機會恢復剛剛的修改了。
由恢復子系統利用日誌文件撤銷剛剛發生的對數據庫的修改。此處的恢復操做是對用戶透明的,用戶不須要干預此處的修復。
形成不一致的緣由
恢復的方法
首先要轉入最新的,正常的數據庫備份副本,使之恢復到最近的正常狀態。
而後對於備份以後的數據,咱們要經過存儲的日誌文件來恢復,重作全部已經完成的事務。