數據庫系統可能發生的故障類型

  雖然當前計算機硬、軟件技術已經發展到相當高的水平,但硬件的故障、系統軟件和應用軟件的錯誤、操作員的失誤以及惡意的破壞仍然是不可避免的。這些故障輕則造成運行事務非正常中斷,影響數據庫中數據的正確性,重則破壞數據庫,使數據庫中數據部分或全部丟失。
  爲了保證各種故障發生後,數據庫中數據都能從錯誤狀態恢復到某種邏輯一致的狀態,數據庫管理系統中恢復子系統是必不可少的。各種現有數據庫系統運行情況表明,數據庫系統所採用的恢復技術是否行之有效,不僅對系統的可靠程度起着決定性作用,而且對系統的運動效率也有很大影響,是衡量系統性能優劣的重要指標。

恢復原理

  事務是數據庫的基本工作單位。一個事務中包含的操作要麼全部完成,要麼全部不做。也就是說,每個運行事務對數據庫的影響或者都反映在數據庫中,或者都不反映在數據庫中。二者必居其一。如果數據庫中只包含成功事務提交的結果,就說此數據庫處於一致性狀態。保證數據一致性是對數據庫的最基本的要求。

  如果數據庫系統運行中發生故障,有些事務尚未完成就被迫中斷,這些未完成事務對數據庫所做的修改有一部分已寫入物理數據庫。這時數據庫就處於一種不正確的狀態,或者說是不一致的狀態,就需要DBMS的恢復子系統,根據故障類型採取相應的措施,將數據庫恢復到某種一致的狀態。

 數據庫運行過程中可能發生的故障主要有三類:事務故障、系統故障和介質故障。不同的故障其恢復方法也不一樣。

①事務故障

  事務在運行過程中由於種種原因,如輸入數據的錯誤、運算溢出、違反了某些完整性限制、某些應用程序的錯誤以及並行事務發生死鎖等,使事務未運行至正常終止點就夭折了,這種情況稱爲事務故障。

  發生事務故障時,夭折的事務可能已把對數據庫的部分修改寫磁盤。恢復程序要在不影響其他事務運行的情況下,強行回滾(ROLLBACK)該事務,即清除該事務對數據庫的所有修改,使得這個事務像根本沒有啓動過一樣。這類恢復操作稱爲事務撤銷(UNDO)。

②系統故障

  系統故障是指系統在運行過程中,由於某種原因,如操作系統或DBMS代碼錯誤、操作員操作失誤、特定類型的硬件錯誤(如CPU故障)、突然停電等造成系統停止運行,致使所有正在運行的事務都以非正常方式終止。這時內存中數據庫緩衝區的信息全部丟失,但存儲在外部存儲設備上的數據未受影響。這種情況稱爲系統故障。

  發生系統故障時,一些尚未完成的事務的結果可能已送入物理數據庫,爲保證數據一致性,需要清除這些事務對數據庫的所有修改。但由於無法確定究竟哪些事務已更新過數據庫,因此係統重新啓動後,恢復程序要強行撤銷(UNDO)所有未完成事務,使這些事務像沒有運行過一樣。

  另一方面,發生系統故障時,有些已完成事務提交的結果可能還有一部分甚至全部留在緩衝區,尚未寫回到磁盤上的物理數據庫中,系統故障使得這些事務對數據庫的修改部分或全部丟失,這也會使數據庫處於不一致狀態,因此應將這些事務已提交的結果重新寫入數據庫。同樣,由於無法確定哪些事務的提交結果尚未寫入物理數據庫,所以系統重新啓動後,恢復程序除需要撤銷所有未完成事務外,還需要重做(Redo)所有已提交的事務,以將數據庫真正恢復到一致狀態。

③介質故障

  系統在運行過程中,由於某種硬件故障,如磁盤損壞、磁頭碰撞,或操作系統的某種潛在錯誤,瞬時強磁場干擾等,使存儲在外存中的數據部分丟失或全部丟失。這種情況稱爲介質故障。這類故障比前兩類故障的可能性小得多,但破壞性最大。

  發生介質故障後,存儲在磁盤上的數據被破壞,這時需要裝入數據庫發生介質故障前某個時刻的數據副本,並重做自此時始的所有成功事務,將這些事務已提交的結果重新記入數據庫。


End:
  對於不同類型的故障,在恢復時應做不同的恢復操作。這些操作從原理上講都是利用存儲在系統其他地方的冗餘數據來重建數據庫中已經被破壞或已經不正確的那部分數據。恢復的基本原理雖然簡單,但實現技術卻相當複雜。一般一個大型數據庫產品,恢復子系統的代碼要佔全部代碼的10%以上。


原文鏈接 http://kjwy.5any.com/sjkyl/Content/ch05/050401/text.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章