系統架構師:數據庫的故障與恢復
瀏覽量: 次 發布日期:2023-09-11 09:13:06
系統架構師:數據庫的故障與恢復
數據庫的故障可用事務的故障來表示,主要分為四類:事務故障。事務在運行過程中由于種種原因,如輸入數據的錯誤、運算溢出、違反了某些完整性限制、某些應用程序的錯誤,以及并發事務發生死鎖等,使事務未運行至正常終止點就被撤銷,這種情況稱為“事務故障”。系統故障。系統故障是指系統在運行過程中,由于某種原因(如操作系統或數據庫管理系統代碼錯誤、操作員操作失誤、特定類型的硬件錯誤(如 CPU 故障)、突然停電等造成系統停止運行),致使事務在執行過程中以非正常方式終止,這時內存中的信息丟失,但存儲在外存儲設備上的數據不會受影響。
介質故障。系統在運行過程中,由于某種硬件故障,如磁盤損壞、磁頭碰撞或由于操作系統的某種潛在的錯誤、瞬時強磁場干擾,使存儲在外存上的數據部分損失或全部損失,稱為“介質故障”。這類故障比前兩類故障的可能性雖然小得多,但破壞性卻最大。計算機病毒。計算機病毒是一種人為破壞計算機正常工作的特殊程序。通過讀寫染有病毒的計算機系統中的程序與數據,這些病毒可以迅速繁殖和傳播,危害計算機系統和數據庫。目前大多數病毒是在 PC 和其兼容機上傳播的。有的病毒一侵入系統就馬上摧毀系統,有的病毒有較長的潛伏期,有的病毒則只在特定的日期發生破壞作用,有的病毒感染系統所有的程序和數據,有的只影響特定的程序和數據。在數據庫系統中,恢復的基本含義就是恢復數據庫本身。也就是說,在發生某種故障使數據庫當前的狀態已經不再正確時,把數據庫恢復到已知為正確的某一狀態。目前數據庫系統中最常用的恢復方法是轉儲和登記日志文件,可根據故障的不同類型,采用不同的恢復策略。
事務故障的恢復。事務故障是指事務未運行至正常終止點前被撤銷,這時恢復的系統應對此事務做撤銷處理。事務故障的恢復是由系統自動完成的,不需要用戶干預,步驟如下:反向掃描文件日志,查找該事務的更新操作。對該事務的更新操作執行逆操作。繼續反向掃描日志文件,查找該事務的其他更新操作,并做同樣處理。如此處理下去,直至讀到此事務的開始標記,事務故障恢復完成。
系統故障的恢復。系統故障發生時,造成數據庫不一致狀態的原因有兩個:一是由于一些未完成事務對數據庫的更新已寫入數據庫;二是由于一些已提交事務對數據庫的更新還留在緩沖區沒來得及寫入數據庫。系統故障的恢復是在重新啟動時自動完成的,不需要用戶干預,步驟如下:正向掃描日志文件,找出在故障發生前已經提交的事務,將其事務標識記入重做(Redo)隊列。同時找出故障發生時尚未完成的事務,將其事務標識記入撤銷(Undo)隊列。對撤銷隊列中的各個事務進行撤銷處理:反向掃描日志文件,對每個 Undo 事務的更新操作執行逆操作。對重做隊列中的各個事務進行重做處理:正向掃描日志文件,對每個 Redo 事務重新執行日志文件登記的操作。介質故障與病毒破壞的恢復。在發生介質故障和遭病毒破壞時,磁盤上的物理數據庫被破壞,這時的恢復操作可分為三步:裝入最新的數據庫后備副本,使數據庫恢復到最近一次轉儲時的一致性狀態。從故障點開始反向讀日志文件,找出已提交事務標識將其記入重做隊列。安慶數據恢復從起始點開始正向閱讀日志文件,根據重做隊列中的記錄,重做所有已完成事務,將數據庫恢復至故障前某一時刻的一致狀態。
具有檢查點的恢復技術。檢查點記錄的內容可包括:
建立檢查點時刻所有正在執行的事務清單。
這些事務最近一個日志記錄的地址。采用檢查點的恢復步驟如下:從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄。由該檢查點記錄得到檢查點建立時所有正在執行的事務清單隊列A。建立重做隊列R和撤銷隊列U,把 A 隊列放入 U 隊列中,R 隊列為空。從檢查點開始正向掃描日志文件,若有新開始的事務 T1,則把 T1 放入 U 隊列,若有提交的事務 T2,則把T2從U隊列移到R隊列,直至日志文件結束。對 U 隊列的每個事務執行 Undo 操作,對 R 隊列的每個事務執行 Redo 操作。
DBA 要做的基本操作是:重裝最近轉儲的后援副本。運行日志文件,執行系統提供的恢復命令。