三級數(shù)據(jù)庫第九章考試要點

字號:

第九章
    一、事務概念和事務的特性
    事務是構(gòu)成單一邏輯工作單元的操作集合。不論有無故障,數(shù)據(jù)庫系統(tǒng)必須保證事務的正確執(zhí)行,即要么執(zhí)行該事務的整個操作集合,要么屬于該事務的操作一個也不執(zhí)行。為了保證事務的正確執(zhí)行,維護數(shù)據(jù)庫的完整性,我們要求數(shù)據(jù)庫系統(tǒng)維護以下事務特性:①原子性(atomicity)事務的所有操作在數(shù)據(jù)庫中要么全部正確反映出來,要么全部不反映。②一致性(consistency)從事務的隔離執(zhí)行(即沒有并發(fā)執(zhí)行的其他事務)來保持數(shù)據(jù)庫的一致性。③隔離性(isolation)盡管多個事務可以并發(fā)執(zhí)行,但系統(tǒng)必須保證,對任一事務Ti和Tj,在Ti看來Tj或者在Ti開始之前已經(jīng)停止執(zhí)行,或者在Ti完成之后開始執(zhí)行。這樣,每個事務都感覺不到系統(tǒng)中有其他事務在并發(fā)地執(zhí)行。④持久性(durability)一個事務成功完成后,它對數(shù)據(jù)庫的改變必須是永久的,即使系統(tǒng)可能出現(xiàn)故障。這些特性通常被稱為ACID特性。解決事務并發(fā)執(zhí)行問題的一種方法是串行地執(zhí)行事務,即一個接一個地執(zhí)行。但這樣性能較低,事務并發(fā)執(zhí)行能顯著地改善性能。因此,數(shù)據(jù)庫管理系統(tǒng)中有一個并發(fā)控制部件,它保證事務隔離性,即確保事務并發(fā)執(zhí)行后的系統(tǒng)狀態(tài)與這些事務以某種次序一個接一個地執(zhí)行后的狀態(tài)是等價的。成功完成執(zhí)行的事務稱為已提交事務。已提交事務使數(shù)據(jù)庫進入一個新的一致狀態(tài),即使出現(xiàn)系統(tǒng)故障,這個狀態(tài)也必須保持。未能成功完成的事務稱為中止事務,中止事務必須對數(shù)據(jù)庫的狀態(tài)不造成影響,即中止事務對數(shù)據(jù)庫所做的任何改變必須撤銷。一旦中止事務造成的變更被撤銷,則稱事務已回滾。
    二、故障恢復(一)故障的類型
    (1)事務故障用兩種錯誤可能造成事務執(zhí)行失敗:①邏輯錯誤。②系統(tǒng)錯誤。事務故障意味著事務沒有達到預期的終點,因此,數(shù)據(jù)庫可能處于不一致狀態(tài)?;謴妥酉到y(tǒng)需要強行回滾該事務,即撤銷該事務對數(shù)據(jù)庫已做的所有的修改,這稱做事務的撤銷或回滾。(2)系統(tǒng)故障硬件故障或者是數(shù)據(jù)庫軟件或操作系統(tǒng)的漏洞,導致系統(tǒng)停止運行。主存儲器內(nèi)容丟失,而外存儲器仍完好無損。發(fā)生系統(tǒng)故障時,可能有些未完成事務所做的數(shù)據(jù)庫修改已經(jīng)寫入到外存的數(shù)據(jù)庫中,因此,數(shù)據(jù)庫可能處于不一致狀態(tài)。為保證一致性,在系統(tǒng)重新啟動時必須強行回滾由于系統(tǒng)故障而非正常終止的事務(UNDO)。另一方面,發(fā)生系統(tǒng)故障時,可能有些已完成事務所做的數(shù)據(jù)庫修改仍部分或全部留在系統(tǒng)緩沖區(qū),尚未寫入到外存的數(shù)據(jù)庫中,這也會使數(shù)據(jù)庫處于不一致狀態(tài)。在系統(tǒng)重新啟動時恢復子系統(tǒng)必須重做(REDO)所有已提交的事務,以保證事務的持久性和數(shù)據(jù)庫的一致性。(3)磁盤故障在數(shù)據(jù)傳送操作過程中由于磁頭損壞或故障造成磁盤塊上的內(nèi)容丟失。這類故障比前兩類故障發(fā)生的可能性小,但危害大。發(fā)生磁盤故障時,可以利用其他磁盤上的數(shù)據(jù)拷貝,或三級介質(zhì)(如磁帶)上的備份來進行恢復。
    (二)基于日志的恢復
    保證在故障發(fā)生后仍保持數(shù)據(jù)庫一致性以及事務的原子性的算法稱為恢復算法,它由兩部分組成:
    (1)在正常事務處理時采取措施,記錄數(shù)據(jù)庫中的更新活動,保證有足夠的信息可用于故障恢復。
    (2)故障發(fā)生后采取措施,將數(shù)據(jù)庫內(nèi)容恢復到某個保證數(shù)據(jù)庫一致性、事務原子性及持久性的狀態(tài)。使用最為廣泛的記錄數(shù)據(jù)庫中更新活動的結(jié)構(gòu)是日志。日志是日志記錄的序列,它記錄了數(shù)據(jù)庫中的所有更新活動。1.日志的登記日志文件在數(shù)據(jù)庫恢復中起著非常重要的作用,它能夠很好地支持事務故障的恢復和系統(tǒng)故障的恢復。利用更新日志記錄中的改前值可以進行UNDO,撤銷已做的修改操作,將數(shù)據(jù)項恢復到修改以前的舊值;利用更新日志記錄中的改后值可以進行REDO,重做已完成的操作,將數(shù)據(jù)項置為修改后的新值。登記日志記錄時必須遵循以下原則:登記的順序嚴格按照事務的并發(fā)執(zhí)行中各操作發(fā)生的實際順序;必須先把日志記錄寫到外存的日志文件中,再把相應的數(shù)據(jù)庫修改寫到外存的數(shù)據(jù)庫中。這稱做先寫日志的原則,是為了發(fā)生故障后保持數(shù)據(jù)庫的原子性和持久性所必須遵循的原則。發(fā)生故障后的恢復
    (1)事務故障恢復的步驟①反向掃描日志文件,查找該事務的更新操作。②對該事務的每一個更新操作執(zhí)行逆操作,即將日志記錄中“改前值”寫入數(shù)據(jù)庫。于是,若日志記錄對應的是插入操作,則這時做刪除操作;若日志記錄對應的是刪除操作,則這時做插入操作;若日志記錄對應的是修改操作,則這時用修改前的值代替修改后的值。③如此處理下去,直至讀到該事務的開始日志,則事務故障恢復結(jié)束。
    (2)系統(tǒng)故障恢復的步驟①正向掃描日志文件,找出在故障發(fā)生前已提交的事務,將其事務標識記入REDO隊列;找出在故障發(fā)生時尚未完成的事務,將其事務標識記入UNDO隊列。②對UNDO隊列中的事務進行UNDO處理,即反向掃描日志文件,對每一個需要UNDO的事務的更新操作執(zhí)行逆操作。③對RREDO隊列中的事務進行REDO處理,即正向掃描日志文件,對每一個需要REDO的事務的更新重新執(zhí)行日志記錄登記的操作。磁盤的恢復需要有DBA介入,裝入最新的數(shù)據(jù)庫后備副本,和有關(guān)的日志文件副本,然后由系統(tǒng)進行恢復工作。
    三、并發(fā)控制(一)事務的并發(fā)執(zhí)行
    ①丟失更新②對未提交更新的依賴③不一致的分析
    (二)并發(fā)事務的調(diào)度
    這兩個調(diào)度都是串行的。串行調(diào)度由來自各事務的指令序列組成,其中屬于同一事務的指令在調(diào)度中緊挨在一起。當多個事務并發(fā)執(zhí)行時,相應的調(diào)度不一定是串行的。若有兩個并發(fā)執(zhí)行的事務,操作系統(tǒng)可能先選其中的一個事務執(zhí)行一小段時間,然后切換上下文,執(zhí)行第二個事務一段時間,接著又切換到第一個事務執(zhí)行一段時間,如此下去。執(zhí)行順序可能會有多種,因為來自兩個事務的各條指令可以交*執(zhí)行。如果并發(fā)執(zhí)行的控制完全由操作系統(tǒng)負責,許多調(diào)度都是可能的,包括像上述調(diào)度那樣使數(shù)據(jù)庫處于不一致狀態(tài)的調(diào)度。保證任何調(diào)度執(zhí)行后數(shù)據(jù)庫總處于一致狀態(tài)是數(shù)據(jù)庫系統(tǒng)的職責。數(shù)據(jù)庫系統(tǒng)中完成此任務的部件是并發(fā)控制部件。
    (三)可串行化
    直觀地說,如果多個事務在某個調(diào)度下的執(zhí)行結(jié)果與這些事務在某個串行調(diào)度下的執(zhí)行結(jié)果相同,則稱這個調(diào)度為可串行化的調(diào)度。下面用等價的概念來定義可串行化的概念。如果某個調(diào)度等價于一個串行調(diào)度,則稱這個調(diào)度是可串行化的。并發(fā)調(diào)度3等價于串行調(diào)度1,于是稱調(diào)度3是一個可串行化的調(diào)度??纱谢嵌鄠€事務并發(fā)執(zhí)行的正確性準則。多個事務在某個調(diào)度下的執(zhí)行是正確的,是能保證數(shù)據(jù)庫一致性,當且僅當該調(diào)度是可串行化的。
    (四)可恢復性
    因一個事務故障導致一系列事務回滾的現(xiàn)象稱為級聯(lián)回滾。由于級聯(lián)回滾導致撤銷大量工作,因此不希望發(fā)生級聯(lián)回滾。我們希望對調(diào)度加以限制,避免級聯(lián)回滾發(fā)生,這樣的調(diào)度稱為無級聯(lián)調(diào)度。