複製鏈接
請複製以下鏈接發送給好友

介質故障

鎖定
介質故障又叫硬故障,是由於硬件的可靠性較差而出現的存儲介質發生物理損壞,造成數據庫的數據全部或部分丟失 [1] 
介質故障即外存故障,如磁盤損壞、強磁場干擾等。這類故障發生的可能性較小,但破壞性很強。它使數據庫受到破壞,並影響正在存取數據的事務 [1] 
介質故障的恢復通常裝入數據庫發生介質故障前某個時刻的數據副本,然後重做自此時始的所有成功事務,將這些事務已提交的結果重新記入數據庫 [1] 
中文名
介質故障
別    名
硬故障
概    述
指外存故障,如磁盤損壞、磁頭碰撞,瞬時強磁場干擾等。
介質恢復
完全介質恢復和不完全介質恢復。
影    響
介質故障會破壞存放在外存的數據庫中的部分或全部數據。
特    點
發生可能性小,破壞性大

介質故障情況簡介

系統故障常稱為軟故障,介質故障稱為硬故障。硬故障指外存故障,如磁盤損壞、磁頭碰撞,瞬時強磁場干擾等。此類故障將破壞數據庫或部分數據庫,並影響正在存取這部分數據的所有事務。此類故障比前兩類故障發生的可能性小得多,但破壞性最大 [2] 
介質故障是指由於各種原因引起的數據庫數據文件、控制文件或重做日誌文件的損壞,導致系統無法正常運行。例如,磁盤損壞導致文件系統被破壞。這就需要管理員提前做好數據庫的備份,否則將導致數據庫無法恢復 [3] 

介質故障故障影響

介質故障比事務故障和系統故障發生的可能性小得多,但破壞性很大。這類故障將破壞數據庫本身,影響到出故障前存儲數據庫的所有事務 [2] 
介質故障稱為硬故障。硬故障指外存故障,如磁盤損壞、磁頭碰撞,瞬時強磁場干擾等。此類故障將破壞數據庫或部分數據庫,並影響正在存取這部分數據的所有事務。此類故障比前兩類故障發生的可能性小得多,但破壞性最大 [2] 
計算機病毒可以繁殖、傳播並造成計算機系統的危害,己成為計算機系統包括數據庫的重要威脅。它也會造成介質故障同樣的後果,破壞外存上的數據庫,並影響正在存取這部分數據的所有事務 [2] 
在上述3種故障中,事務故障和系統故障都不會破壞外存中數據庫的數據,而介質故障將破壞存放在外存的數據庫中的部分數據或全部數據。因此,事務故障和系統故障可以由系統自動恢復,而介質故障必須藉助數據庫管理員的幫助,由數據庫管理員和系統一起恢復 [2] 

介質故障介質故障恢復

介質故障在所有的故障中,對數據庫系統造成的危害最大,磁盤上的物理數據和日誌文件被破壞,這是最嚴重的一種故障,發生介質故障後,數據庫的物理數據和日誌記錄將被破壞。要恢復介質故障,只能使用基於數據轉儲的數據恢復技術。恢復時,首先重裝數據庫,然後重做事務。具體步驟如下 [4] 
(1)裝入最新的數據庫後備副本(離故障發生時刻最近的轉儲副本),使數據庫恢復到最近一次轉儲時的一致性狀態。對於動態轉儲的數據庫副本,還需同時裝入轉儲開始時刻的日誌文件副本,利用恢復系統故障的方法,才能將數據庫恢復到一致性狀態 [4] 
(2)裝入相應的日誌文件副本(轉儲結束時刻的日誌文件副本),重做已完成的事務。即:首先掃描日誌文件,找出故障發生時已提交的事務的標識,將其記入重做隊列。然後正向掃描日誌文件,對重做隊列中的所有事務進行重做處理。即將日誌記錄中“更新後的值”寫人數據庫。這樣就可以將數據庫恢復至故障前某一時刻的一致狀態了 [4] 
介質故障是當一個文件、個文件的部分或一磁盤不能讀或不能寫時出現的故障。介質故障的恢復有以下兩種形式,它們決定於數據庫運行的歸檔方式 [5] 
①如果數據庫是可運行的,以致它的聯機日誌僅可重用但不能歸檔,此時介質恢復為使用最新的完全備份的簡單恢復。在完全備份執行的工作必須手工重做 [5] 
②如果數據庫可運行,且聯機日誌是被歸檔的,該介質故障的恢復是一個實際恢復過程,重構受損的數據庫恢復到介質故障前的一個指定事務一致狀態。不管哪種形式,介質故障的恢復總是將整個數據庫恢復到與故障之前的一個事務保持一致狀態。如果數據庫是在ARCHIⅣ VELOG方式運行,可有不同類型的介質恢復:完全介質恢復和不完全介質恢復 [5] 
(1)完全介質恢復。
完全介質恢復可恢復全部丟失的修改,僅當所有必要的日誌可用時才可能。有不同類型的完全介質恢復可使用,其決定於毀壞文件和數據庫的可用性 [5] 
①關閉數據庫的恢復。當數據庫可被裝配是關閉的,完全不能正常使用,此時可進行全部的或單個毀壞數據文件的完全介質恢復 [5] 
②打開數據庫的脱機表空間的恢復。當數據庫是打開時,完全介質恢復可以處理。損的數據庫表空間是聯機的,可以使用,而受損表空間是脱機的,其所有數據文件作為恢復的對象 [5] 
③打開數據庫的脱機表空間的單個數據文件的恢復。當數據庫是打開時,完全介質恢復可以處理。未損的數據庫表空間是聯機的,可以使用,而所損的表空間是脱機的,該表空間指定所損的數據文件可被恢復 [5] 
④使用備份的控制文件的完全介質恢復。當控制文件所有拷貝由於磁盤故障而受損時,可進行介質恢復而不丟失數據 [5] 
(2)不完全介質恢復
不完全介質恢復是在完全介質恢復不可能或不要求時進行的介質恢復。重構受損的數據庫,使其恢復到介質故障前或用户出錯之前的一個事務一致性狀態。不完全介質恢復的類型包括:基於撤銷、基於時間和基於修改的不完全恢復,它們決定於需要不完全介質恢復的情況 [5] 
①基於撤銷恢復。在某種情況下,不完全介質恢復必須被控制,DBA可撤銷在指定點的操作。基於撤銷的恢復地在一個或多個日誌組(聯機的或歸檔的)已被介質故障所破壞不能用於恢復過程時使用,所以介質恢復必須控制,以致在使用最近的、未損的日誌組於數據文件後中止恢復操作 [5] 
②基於時間和基於修改的恢復。如果DBA希望恢復到過去的某個指定點,不完全介質恢復可成功完成。可在下列情況下使用 [5] 
①當用户意外刪除一表,並注意到錯誤提交的估計時間,DBA可立即關閉數據庫,恢復它到用户錯誤之前的時刻 [5] 
②由於系統故障,一個聯機日誌文件的部分被破壞,所以活動的日誌文件突然不可使用,實例被中止,此時需要介質恢復。在恢復中可使用當前聯機日誌文件的未損部分,DBA利用基於時間的恢復,一旦將有效的聯機日誌已應用於數據文件後停止恢復過程 [5] 
在這兩種情況下,不完全介質恢復的終點可由時間點或系統修改號(SCN)來指定 [5] 

介質故障故障種類

介質故障事務故障

事務故障是指某個事務在運行過程中由於種種原因未能運行至終止點( COMMIT或ROLLBACK),發生故障 [6] 
事務故障的常見原因包括輸入數據有誤、運算溢出、違反了完整性限制、應用程序出錯、並行事務發生死鎖等 [6] 
發生事務故障時,未完成的事務可能把對數據庫的部分修改已寫回物理數據庫,此時的數據庫可能處於不正確的狀態,恢復程序要在不影響其他事務運行的情況下,強行回滾(ROLLBACK)該事務,清除該事務對數據庫的所有修改,使得這個事務好像根本沒有運行過一樣 [6] 

介質故障系統故障

系統故障是指操作系統或DBMS代碼錯誤、特定類型的硬件錯誤(如CPU故障)或突然停電等原因,使得系統要重新啓動。發生系統故障時,所有正在運行的事務都非正常終止,內存中數據庫緩衝區的信息全部丟失,但外部存儲設備上的數據未受影響 [6] 
一方面,發生系統故障時,一些尚未完成的事務的結果可能已被寫人物理數據庫,從而造成數據庫可能處於不正確的狀態。為保證數據一致性,需要清除這些事務對數據庫的所有修改。恢復子系統必須在系統重新啓動時讓所有非正常終止的事務回滾,強行撤銷(UNDO)所有未完成的事務 [6] 
另一方面,發生系統故障時,有些已完成事務的結果可能有一部分甚至全部留在緩衝區中,尚未寫入磁盤上的物理數據庫,系統故障使得這些事務對數據庫的修改部分或全部丟失,這也會使數據庫處於不一致狀態,因此應將這些事務已提交的結果重新寫入數據庫。恢復子系統必須在系統重新啓動時重做( REDO)所有已提交的事務,以將數據庫恢復到一致狀態 [6] 

介質故障介質故障

系統故障稱為“軟故障”(SoftCrash)。介質故障稱為“硬故障”(HardCrash)。介質故障是指由於磁盤損壞、磁頭碰撞、瞬時強磁場干擾等原因,使得存儲在外存中的數據部分丟失或全部丟失 [6] 
介質故障比前兩類故障的可能性小得多,但破壞性大得多。關鍵概念:事務故障和系統故障不會破壞外存中數據庫的數據,介質故障會破壞存放在外存的數據庫中的部分或全部數據 [6] 
總結各類故障,對數據庫的影響有兩種可能性:一是數據庫本身被破壞;二是數據庫沒有被破壞,但數據可能不正確 [6] 

介質故障故障恢復手段

數據庫系統中的恢復機制主要指恢復數據庫本身,即在故障引起數據庫當前狀態不一致後將數據庫恢復到某個正確狀態或一致性狀態 [7] 
故障恢復的原理很簡單,就是預先在數據庫系統外,備份正確狀態時的數據庫影像數據,當發生故障時,再根據這些影像數據來重建數據庫。恢復機制要做兩件事情:第一,建立冗餘數據;第二,根據冗餘數據恢復數據庫。故障恢復的原理雖然簡單,但實現技術相當複雜 [7] 
建立冗餘數據的常用方法是數據庫轉儲法和日誌文件法 [7] 
1.數據庫轉儲法
由DBA(數據庫管理員)定期地把整個數據庫複製到磁帶、另一個磁盤或光盤上保存起來,作為數據庫的後備副本(也稱後援副本),稱為數據庫轉儲法 [7] 
數據庫發生破壞時,可把後備副本重新裝入以恢復數據庫。但重裝副本只能恢復到轉儲時的狀態。自轉儲以後的所有更新事務必須重新運行,才能使數據庫恢復到故障發生前的一致狀態。
由於轉儲的代價很大,因此必須根據實際情況確定一個合適的轉儲週期 [7] 
轉儲分為靜態轉儲和動態轉儲兩類 [7] 
1)靜態轉儲
在系統中沒有事務運行的情況下進行轉儲稱為靜態轉儲。這可保證得到一個一致性的數據庫副本,但在轉儲期間整個數據庫不能使用 [7] 
2)動態轉儲
允許事務併發執行的轉儲稱為動態轉儲。動態轉儲克服了靜態轉儲會降低數據庫可用性的缺點,但不能保證轉儲後的副本是正確有效的。例如,在轉儲中,把某一數據存儲到了副本,但在轉儲結束前,某一事務又把此數據修改了,這樣,後備副本上的數據就不正確了 [7] 
因此必須建立日誌文件,把轉儲期間任何事務對數據庫的修改都記錄下來。以後,後備副本加上日誌文件就可把數據庫恢復到前面動態轉儲結束時的數據庫狀態 [7] 
另外,轉儲還可以分為海量轉儲和增量轉儲。海量轉儲是指轉儲全部數據庫:增量轉儲是指只轉儲上次轉儲後更新過的數據 [7] 
數據庫中的數據一般只會部分更新。因此,採用增量轉儲可明顯減少轉儲的開銷。例如,每週做一次海量轉儲,每天做一次增量轉儲。也可每天做一次增量轉儲,當總的增量轉儲的內容達到一定量時,做一次海量轉儲 [7] 
2.日誌文件法
前面已指出,重裝副本只能使數據庫恢復到轉儲時的狀態,必須接着重新運行自轉儲後的所有更新事務才能使數據庫恢復到故障發生前的一致狀態。日誌文件法就是用來記錄所有更新事務的 [7] 
為保證數據庫是可恢復的,日誌文件法必須遵循以下兩條原則 [7] 
(1)事務每一次對數據庫的更新都必須寫入日誌文件。一次更新在日誌文件中有一條記載更新工作的記錄 [7] 
(2)必須先把日誌記錄寫到日誌文件中,再執行更新操作,即日誌先寫原則 [7] 
曰志文件有三類記錄:
(1)每個事務開始時,必須在日誌文件中登記一條該事務的開始記錄 [7] 
(2)每個事務結束時,必須在日誌文件中登記一條結束該事務的記錄(註明為(COMMIT或ROLLBACK) [7]  ;
(3)任一事務的任一次對數據庫的更新,都必須在日誌文件中登入一條記錄,其格式為
(<事務標識>,<操作類型>,<更新前數據舊值>,<更新後數據的新值>)其中,<操作類型>有插入、刪除和修改三種類型 [7] 
參考資料
  • 1.    張錫英,李林輝,邊繼龍主編,數據庫系統原理 第2版,哈爾濱工業大學出版社,2016.03,第113頁
  • 2.    趙曉峯主編;餘曉永,吳姜副主編,數據庫原理與運用基礎教程,對外經濟貿易大學出版社,2014.09,第63頁
  • 3.    李明俊主編,ORACLE 11g數據庫與應用開發教程,哈爾濱工業大學出版社,2013.03,第288頁
  • 4.    錢雪忠,王月海主編;陳國俊,徐華,錢瑛副主編,數據庫原理及應用 第4版,北京郵電大學出版社,2015.04,第181頁
  • 5.    張錫英,李林輝,邊繼龍主編,數據庫系統原理 第2版,哈爾濱工業大學出版社,2016.03,第190頁
  • 6.    胡學鋼總主編;葉明全,伍長榮主編;汪洋,潘潔珠,崔琳,殷雲霞,範慶春副主編,數據庫技術與應用(第2版),安徽大學出版社,2015.07,第127頁
  • 7.    張紅娟,傅婷婷編著;郭盈發主審,數據庫原理 (第4版),西安電子科技大學出版社,2016.07,第235頁