1、Chap 15,回復處理,15-1-1 資料庫系統的故障種類15-1-2 回復處理演算法與儲存體15-1-3 資料存取的基礎,15-1 回復處理的基礎,交易失敗(Transaction Failure):交易錯誤是在執行交易的過程中所產生的軟體錯誤。系統故障:斷電、網路問題或其他硬體或軟體錯誤所導致的系統當機,因為系統當機,儲存在記憶體的相關資料都會遺失。儲存媒體故障:硬體磁碟讀寫頭損壞、磁區損壞的問題或其他類似的硬碟錯誤所導致儲存媒體儲存資料的損壞,儲存媒體錯誤會導致資料庫系統的資料遺失,屬於資料庫系統最嚴重的一種故障。,15-1-1 資料庫系統的故障種類,回復演算法主要分成兩個部分,如下所
2、示:在資料庫系統正常執行交易時:預先執行相關操作儲存所需資料,以備資料庫系統故障時擁有足夠資訊,可以回復資料庫系統。當資料庫系統故障時:如果資料庫系統故障發生錯誤,能夠回復資料庫系統滿足交易的單元性、一致性和永久性。簡單的說,不論資料庫系統是正常執行或故障,都一定滿足資料庫一致性,交易的單元性和永久性。,15-1-2 回復處理演算法與儲存體,儲存體可以分為三種,如下所示:揮發性儲存體:當系統當機、斷電或停電時,其儲存資料就會消失的儲存結構。非揮發性儲存體:這種儲存結構是對比揮發性儲存結構,儲存結構不會因為系統當機、斷電或停電而使其儲存的資料消失。穩定儲存體:這是一種可以在任何資料庫故障的情況下
3、,不論是系統當機或磁碟讀寫頭損壞、磁區損壞,其儲存的資料都不會消失,其作法通常是維護多份資料,分別備份儲存在多個非揮發性儲存結構來達成。,15-1-2 回復處理演算法與儲存體,資料庫系統的資料存取(Data Access)是從儲存裝置磁碟的資料庫存取資料,取得執行交易所需的資料。資料存取會影響資料庫系統故障時,可能損失的資料,相對的,回復處理就是在救回這些遺失的資料。資料庫系統並不是直接從儲存裝置存取資料,而是透過資料庫緩衝區(Database Buffer)和主記憶體中各交易的工作區(Work Area)。,15-1-3 資料存取的基礎,15-1-3 資料存取的基礎-圖例,15-2-1 交易
4、記錄15-2-2 基於交易記錄的回復處理15-2-3 投影分頁,15-2 回復處理的方式,以SQL Server來說,記錄管理(Log Manager)首先替每一筆交易產生唯一的交易編號,記錄此交易所有寫入的資料庫單元操作,以便在回復交易時,可以依據交易記錄,將所有影響的資料回復到交易前的狀態。交易可能擁有多項不同的寫入操作,所以同一個交易會寫入多筆記錄,資料庫管理系統是使用交易編號來識別相關記錄屬於哪一個交易。,15-2-1 交易記錄-說明,15-2-1 交易記錄-欄位說明,例如:在SQL Server開始執行交易T時,資料庫管理系統指定其交易編號為001,新增一筆記錄到交易記錄,如下所示:
5、上述交易記錄編號是001,指令BEGIN TRAN開始執行交易。接著將交易執行的所有INSERT、UPDATE和DELETE指令都新增一筆相同交易編號的記錄,如下所示:,15-2-1 交易記錄-範例,基於交易記錄的回復處理(Log-Based Recovery)是使用交易記錄作為回復處理的依據。例如:在確認交易將更改的資料庫內容反應到資料庫後,如果資料庫系統故障,回復處理可以參考交易記錄(Transaction Log)來回存各交易所作的資料庫寫入操作,以便將資料庫內容回復到交易前的狀態。,15-2-2 基於交易記錄的回復處理,延遲資料庫更新(Defered Database Update):
6、將交易執行的所有資料庫更新操作都寫入交易記錄,此動作稱為記錄寫入優先協定(Write-ahead Log Protocol),但是資料更新是在各交易的工作區,需要等到確認交易後,才真正寫入資料庫。立即資料庫更新(Immediate Database Update):如果交易下達指令執行資料庫更新操作,在寫入交易記錄後,不論是否確認交易,都立即將更新資料寫入資料庫。,15-2-2 基於交易記錄的回復處理,投影分頁在執行交易的過程中維護兩份分頁目錄,一份是目前分頁目錄,一份是投影分頁目錄,如下圖:,15-2-3 投影分頁-基礎,投影分頁的回復處理十分簡單,因為交易執行過程一直保留兩份分頁目錄,當資
7、料庫系統故障時,只需使用投影分頁目錄(一份沒有更改的資料)回存資料庫,就可以回復到交易前狀態,取消所有的資料更改。,15-2-3 投影分頁-回復處理,投影分頁的優點投影分頁並不需要交易記錄,即不需要記錄管理來建立交易記錄。投影分頁回復處理十分直接簡單,如同備份的檔案,只需將備份檔案回存即可。投影分頁的缺點使用投影分頁執行交易需要複製整個磁碟分頁,十分浪費系統資源。確認交易時,所有更新的分頁和分頁目錄都需寫回資料庫,增加系統的負擔。,15-2-3 投影分頁,更新的分頁是儲存在未使用的磁碟分頁,所以會改變磁碟中儲存的位置,在經過多次交易後,磁碟分頁將會打散,造成資料儲存的支離破碎。在每次確認交易後
8、,舊版的分頁就不再使用,這些磁碟空間可以再收集起來重複使用,所以投影分頁需要垃圾空間收集機制來有效的使用磁碟分頁。投影分頁很難擴充使用在並行執行交易,換句話說,多個交易並行控制的資料庫系統,很難使用投影分頁的回復方式。,15-2-3 投影分頁-缺點2,交易失敗(Transaction Failure)是在交易執行的過程中產生錯誤,導致交易無法執行完成,換句話說,交易並沒有到達確認交易的狀態。例如:並行控制的死結或使用者放棄交易等情況所導致的交易失敗。對於交易失敗的回復處理,因為資料庫系統並沒有任何的資料遺失,所以,資料庫管理系統的回復處理只是讓資料庫回復到交易前狀態即可。,15-3 交易失敗的
9、回復處理-說明,延遲資料庫更新的回復處理如果資料庫管理系統是使用延遲資料庫更新(Defered Database Update),因為交易需要到達確認交易,才會將更新資料寫入資料庫,如果錯誤是發生在確認交易前,更新資料根本還沒有寫入資料庫,所以沒有取消任何操作的需要。,15-3 交易失敗的回復處理,立即資料庫更新的回復處理如果資料庫管理系統是使用立即資料庫更新(Immediate Database Update),因為交易是在尚未確認交易前,就已經立即將更新的資料寫入資料庫,所以回復處理需要取消交易已經執行的所有更新操作,即所謂的UNDO程序,詳細的說明請參閱第15-4-1節。,15-3 交易
10、失敗的回復處理,15-4-1 UNDO/REDO的回復處理15-4-2 使用檢查點執行回復處理,15-4 系統故障的回復處理,系統故障(System Failure)也稱為軟當機(Soft Crash),這是在停電或斷電情況下導致的系統當機,因為沒有電源,所以電腦主記憶體的內容會因斷電而消失,影響目前正在執行的交易,和儲存在工作區和緩衝區的交易資料。在重新啟動資料庫系統後,回復處理需要決定取消哪些尚未執行確認交易的交易,或是已經確認交易,但是尚未寫入資料庫的交易,這些交易需要重新執行。,15-4 系統故障的回復處理-說明,UNDO取消:將交易影響的資料庫資料回復到執行交易前的狀態,如果使用立即
11、資料庫更新,因為已經將資料真正寫入資料庫,所以需要參考交易記錄,一一將更新資料回存成交易記錄的原始值(Before)。REDO重作:如果交易已經確認交易,但是尚未真正寫入資料庫,回復處理需要重新執行這些交易,將資料庫更新成交易後的狀態,也就是參考交易記錄,一一將交易更新的所有資料項目都指定成交易記錄的更新值(After)。,15-4 系統故障的回復處理-操作,UNDO/REDO演算法是基於交易記錄的回復處理(Log-Based Recovery)最常使用的演算法,可以分為:NO-UNDO/REDOUNDO/NO-REDOUNDO/REDO,15-4-1 UNDO/REDO的回復處理,延遲資料庫
12、更新的回復處理如果資料庫管理系統是使用延遲資料庫更新(Defered Database Update),因為交易需要到達確認交易狀態,才會將更新資料寫入資料庫,如果交易錯誤是發生在確認交易前,更新資料根本還沒有寫入資料庫,所以並不需要執行UNDO程序。但是,系統當機有可能是發生在確認交易之後,而且是在真正寫入資料庫之前,所以需要執行REDO程序重作這些已經確認交易的交易,稱為NO-UNDO/REDO演算法。,15-4-1 UNDO/REDO的回復處理,例如:資料表Test第1筆記錄的A欄位、第2筆記錄的B和C欄位初值都是1000,交易T1和T2的單元操作步驟,如下圖所示:,15-4-1 UND
13、O/REDO的回復處理,交易記錄(一)如果系統當機發生故障時的交易記錄內容: 系統故障上述交易記錄的交易T1和T2都沒有記錄,表示交易T1和T2尚未確認交易,所以沒有REDO程序。,15-4-1 UNDO/REDO的回復處理,交易記錄(二)如果系統當機發生故障時的交易記錄內容: 系統故障REDO交易T1:將Test資料表第1筆記錄的欄位A改為更新值500,第2筆記錄的欄位B改為更新值1500。,15-4-1 UNDO/REDO的回復處理,交易記錄(三)如果系統當機發生故障時的交易記錄內容,如下所示: 系統故障REDO交易T1:將Test資料表第1筆記錄的欄位A改為更新值500,第2筆記錄的欄位
14、B改為更新值1500。REDO交易T2:將Test資料表第2筆記錄的欄位C改為更新值700。,15-4-1 UNDO/REDO的回復處理,立即資料庫更新的回復處理如果資料庫管理系統是使用立即資料庫更新,因為交易是立即將更新資料寫入資料庫,第一種情況是所有的更新操作都在確認交易前寫入資料庫,如此並不需要REDO程序,回復處理只需UNDO取消已經執行的所有更新操作,稱為UNDO/NO-REDO演算法。另一種情況是允許所有更新操作在寫入資料庫前,可以執行確認交易,如果已經確認交易,就需要執行REDO程序,尚未確認交易則是執行UNDO程序,稱為UNDO/REDO演算法。,15-4-1 UNDO/RED
15、O的回復處理,交易記錄(一) 系統故障UNDO交易T1:將Test資料表第1筆記錄的欄位A回存原始值1000,第2筆記錄的欄位B回存原始值1000。UNDO交易T2:將Test資料表第2筆記錄的欄位C回存原始值1000。,15-4-1 UNDO/REDO的回復處理,交易記錄(二) 系統故障REDO交易T1:將Test資料表第1筆記錄的欄位A改為更新值500,第2筆記錄的欄位B改為更新值1500。UNDO交易T2:將Test資料表第2筆記錄的欄位C回存原始值1000。,15-4-1 UNDO/REDO的回復處理,交易記錄(三) 系統故障REDO交易T1:將Test資料表第1筆記錄的欄位A改為更新
16、值500,第2筆記錄的欄位B改為更新值1500。REDO交易T2:將Test資料表第2筆記錄的欄位C改為更新值700。,15-4-1 UNDO/REDO的回復處理,檢查點(Checkpoint)觀念是另一種方法來決定系統故障時,受影響的交易範圍,它是從故障發生的時間點到最近的檢查點作為一個檢查範圍,找出受影響的交易,然後決定出哪些交易需要UNDO,哪些交易需要REDO。,15-4-2 使用檢查點執行回復處理,在資料庫管理系統的記錄管理(Log Manager)除了完整記錄交易的資料庫寫入操作外,每間隔一段時間就會在交易記錄自動寫入檢查點記錄(Checkpoint Record),如下所示:將目
17、前所有儲存在記憶體的交易記錄都實際寫入儲存裝置。將緩衝區中更新的資料也都實際更新到儲存裝置。將檢查點記錄寫入儲存裝置。,15-4-2 使用檢查點執行回復處理,15-4-2 使用檢查點執行回復處理,T1交易:在檢查點tc前開始和完成交易。T2交易:在檢查點tc前開始,tf系統錯誤前完成交易。T3交易:在檢查點tc前開始,直到tf系統錯誤都沒有完成交易。T4交易:在檢查點tc後開始,tf系統錯誤前完成交易。T5交易:在檢查點tc後開始,直到tf系統錯誤都沒有完成交易。,15-4-2 使用檢查點執行回復處理,在重新啟動資料庫系統,回復處理針對上述各種交易所執行的處理,如下表所示:,15-4-2 使用
18、檢查點執行回復處理,儲存媒體故障(Media Failure)也稱為硬當機(Hard Crash),這是指磁碟讀寫頭故障或磁碟的磁區損壞,造成資料寫入或讀取錯誤,這種錯誤將導致資料庫儲存的資料受損,而且影響使用這部分資料的相關交易。,15-5 儲存媒體故障的回復處理,交易記錄受損:資料庫的資料並未受損,資料庫管理系統不會受到影響,不過交易記錄遺失,相關交易執行的資料庫單元操作無法回復。資料庫受損:因為交易記錄並未受損,資料庫管理師只需將先前備份的資料重新載入,資料庫管理系統可以從備份時間點開始,參考交易記錄來回復資料庫內容。交易記錄和資料庫同時受損:因為資料庫和交易記錄都已經受損,資料庫管理師
19、只能將備份資料載入,然後儘可能以手動方式回復資料庫的內容。,15-5-1 儲存媒體故障的三種資料受損情況,磁碟陣列RAID是一種技術來管理一組磁碟,將所有的實際磁碟串接成陣列,但是將它視為是同一個邏輯磁碟,RAID提供容錯功能(Fault-Tolerance),可以防止資料遺失,其作法是在儲存時多儲存一些檢查資料,以備損壞時可以進行錯誤回復。磁碟陣列RAID技術可以分成多種不同的等級,在實務上常用的是RAID 5和RAID 6的磁碟陣列。,15-5-2 磁碟陣列RAID-說明,15-5-2 磁碟陣列RAID-磁碟陣列等級,儲存媒體錯誤的回復處理需要借助資料備份與還原,所以資料庫管理系統需要提供
20、備份與還原功能,而且資料庫管理師的重要工作就是記得定時備份資料。在資料庫中需要備份的資料有兩種:資料庫和交易記錄,所以資料庫管理師在執行備份時,除了資料庫外,請注意!不要忘了備份交易記錄。,15-6 資料備份與還原,磁帶(Tape):傳統備份裝置,早期大型主機都是使用磁帶備份裝置。磁帶類似錄音帶,只是尺寸較大,以循序方式將資料寫入磁帶來備份。磁性光碟(Magneto Optical):磁性光碟簡稱MO,它是一種大小約等於3.5磁片大小的光碟片,可以重複讀寫,其容量有:230MB、640MB和1.3GB等規格。硬式磁碟(Hard Disk):使用另一台硬式磁碟作為備份裝置,例如:使用USB介面的
21、外接式硬碟來備份資料。,15-6-1 資料備份-儲存媒體1,可燒錄CD光碟(CD-R、CD-RW):隨著燒錄機的普遍和燒錄光碟片的價格下降,使用CD-R或CD-RW進行資料備份也愈來愈普遍,CD-R只能單次燒錄,而CD-RW則可重複讀寫,其容量為650或700MB。可燒錄DVD光碟(DVD+R、DVD-R、DVD+RW、DVD-RW):在DVD可燒錄光碟中,DVD-R和DVD+R只能單次燒錄,DVD+RW和DVD-RW可重複讀寫,-和+是指兩大陣營不同的DVD燒錄規格,其容量主要有4.7GB或8.5GB,更大容量也在持續開發中。,15-6-1 資料備份-儲存媒體2,備份資料庫就是建立資料庫的複
22、本,如同替資料庫照像,稱為影像複本(Image Copies)。資料庫備份的方式共兩種,如下:完整影像複本備份(Full Image Copy Backup):完整影像複本備份是建立特定時間點(備份時間點)資料庫內容的完整資料複本。遞增影像複本備份(Incremental Image Copy Backup):也稱為差異備份(Differential Backup),這種備份只備份上次完整或遞增影像複本備份之後,交易更新部分的資料。,15-6-1 資料備份-資料庫的備份,交易記錄的備份(Transaction Log Backup)就是單獨備份資料庫管理系統的交易記錄。例如:SQL Serve
23、r資料庫的復原模式需要是完整(Full)或大量記錄(Bulk-logged),才允許單獨備份交易記錄(SQL Server稱為交易記錄檔)。,15-6-1 資料備份-交易記錄的備份,問題:資料庫管理師執行備份的頻率,也就是規劃資料備份的排程。資料庫管理師可以依據兩個原因來決定備份頻率,如下所示:影像複本備份頻率可以保證擁有合理的系統回復時間,這是指備份頻率所備份的資料足以在合理時間內回復且重建資料庫系統,以便公司或組織可以在合理時間內恢復正常運作。資料備份頻率不會影響公司或組織的正常運作。,15-6-2 資料備份的排程與策略,15-6-2 資料備份的排程與策略,象限A:重要且靜態資料,只需一個
24、星期備份一次即可。象限B:重要且動態資料,每天都應該至少執行完整影像複本備份一次。如果資料庫的資料大,可以配合遞增影像複本備份,每天執行一次完整影像複本備份外,再執行多次遞增影像複本備份。象限C:不重要且靜態資料,因為資料並不重要,而且很少交易,可以備份,也可以不備份。象限D:不重要且動態資料,因為資料並不重要,可以一個月再執行一次完整影像複本備份,每天備份交易記錄或遞增影像複本備份即可。,15-6-2 資料備份的排程與策略,資料還原是將備份在儲存媒體的資料回存資料庫系統,資料還原操作包含回復處理,其基本步驟如下:Step 1:識別發生的錯誤是否是儲存媒體失敗。Step 2:分析目前狀況,了解錯誤發生的原因和如何解決。Step 3:決定復原的資料有哪些,是資料庫或交易記錄受損。Step 4:找出回復資料間的關聯性,例如:受損資料影響多少交易。Step 5:找出需要還原的影像複本備份。Step 6:還原影像複本備份。Step 7:使用交易記錄回復資料庫的內容。,15-6-3 資料還原,