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

字號:

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