版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第10章章 數(shù)據(jù)庫(kù)的恢復(fù)技術(shù)數(shù)據(jù)庫(kù)的恢復(fù)技術(shù)10.1 事務(wù)的基本概念事務(wù)的基本概念10.2 數(shù)據(jù)庫(kù)恢復(fù)概述數(shù)據(jù)庫(kù)恢復(fù)概述10.3 故障的種類(lèi)故障的種類(lèi)10.4 恢復(fù)的實(shí)現(xiàn)技術(shù)恢復(fù)的實(shí)現(xiàn)技術(shù)10.5 恢復(fù)策略恢復(fù)策略10.6 具有檢查點(diǎn)的恢復(fù)技術(shù)具有檢查點(diǎn)的恢復(fù)技術(shù)10.7 數(shù)據(jù)庫(kù)鏡像數(shù)據(jù)庫(kù)鏡像10.8 小結(jié)小結(jié) 數(shù)據(jù)庫(kù)的定義:數(shù)據(jù)庫(kù)的定義: 數(shù)據(jù)庫(kù)被破壞的原因,可歸納為:數(shù)據(jù)庫(kù)被破壞的原因,可歸納為: 軟硬件故障,造成數(shù)據(jù)被破壞。軟硬件故障,造成數(shù)據(jù)被破壞。 數(shù)據(jù)庫(kù)的并發(fā)操作引起數(shù)據(jù)的不一致性。數(shù)據(jù)庫(kù)的并發(fā)操作引起數(shù)據(jù)的不一致性。 自然或人為地破壞,如失火、失竊、病毒和自然或人為地破壞,如失
2、火、失竊、病毒和為授權(quán)人的有意纂改數(shù)據(jù)。為授權(quán)人的有意纂改數(shù)據(jù)。 對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的更新操作有誤,如操作時(shí)輸對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的更新操作有誤,如操作時(shí)輸入錯(cuò)誤的數(shù)據(jù)或存取數(shù)據(jù)庫(kù)的程序有錯(cuò)等等。入錯(cuò)誤的數(shù)據(jù)或存取數(shù)據(jù)庫(kù)的程序有錯(cuò)等等。針對(duì)這四類(lèi)問(wèn)題,一般針對(duì)這四類(lèi)問(wèn)題,一般dbms提供了相應(yīng)的功能:提供了相應(yīng)的功能: 安全性保護(hù):安全性保護(hù):保護(hù)數(shù)據(jù)庫(kù)防止惡意的破壞和非法保護(hù)數(shù)據(jù)庫(kù)防止惡意的破壞和非法的存取,防范對(duì)象:非法用戶和非法操作。的存取,防范對(duì)象:非法用戶和非法操作。 完整性保護(hù):完整性保護(hù):防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),也就是防止數(shù)據(jù)庫(kù)中存在不正確的數(shù)據(jù)。據(jù),也
3、就是防止數(shù)據(jù)庫(kù)中存在不正確的數(shù)據(jù)。防范對(duì)象:不合語(yǔ)義的、不正確的數(shù)據(jù)防范對(duì)象:不合語(yǔ)義的、不正確的數(shù)據(jù) (實(shí)體,參照)實(shí)體,參照) 數(shù)據(jù)庫(kù)恢復(fù):即系統(tǒng)失效后的數(shù)據(jù)庫(kù)恢復(fù),配合定數(shù)據(jù)庫(kù)恢復(fù):即系統(tǒng)失效后的數(shù)據(jù)庫(kù)恢復(fù),配合定時(shí)備份數(shù)據(jù)庫(kù),使數(shù)據(jù)庫(kù)不丟失數(shù)據(jù)。時(shí)備份數(shù)據(jù)庫(kù),使數(shù)據(jù)庫(kù)不丟失數(shù)據(jù)。 并發(fā)控制:即保證多用戶能共享數(shù)據(jù)庫(kù),并維護(hù)數(shù)并發(fā)控制:即保證多用戶能共享數(shù)據(jù)庫(kù),并維護(hù)數(shù)據(jù)的一致性。據(jù)的一致性。 10.1 10.1 事務(wù)的基本概念事務(wù)的基本概念10.1.1 10.1.1 事務(wù)的定義事務(wù)的定義1.1.什么是事務(wù)什么是事務(wù)n事務(wù)事務(wù)是是由用戶定義的一組操作序列,這些操作要么都做,由用戶定義的一
4、組操作序列,這些操作要么都做,要么都不做,是一個(gè)不可分割的工作單位要么都不做,是一個(gè)不可分割的工作單位, ,是恢復(fù)和并發(fā)是恢復(fù)和并發(fā)控制的基本單位控制的基本單位. .n是一種機(jī)制,它確保多個(gè)是一種機(jī)制,它確保多個(gè)sqlsql語(yǔ)句被當(dāng)作語(yǔ)句被當(dāng)作單個(gè)工作單元單個(gè)工作單元來(lái)來(lái)處理處理2 2 . .事務(wù)和程序是兩個(gè)概念事務(wù)和程序是兩個(gè)概念n在關(guān)系數(shù)據(jù)庫(kù)中,一個(gè)事務(wù)可以是一條在關(guān)系數(shù)據(jù)庫(kù)中,一個(gè)事務(wù)可以是一條sqlsql語(yǔ)句,一組語(yǔ)句,一組sqlsql語(yǔ)句或整個(gè)程序語(yǔ)句或整個(gè)程序n一個(gè)應(yīng)用程序通常包含多個(gè)事務(wù)一個(gè)應(yīng)用程序通常包含多個(gè)事務(wù)3 3 . .定義事務(wù)定義事務(wù)n隱式方式隱式方式當(dāng)用戶沒(méi)有顯式地定
5、義事務(wù)時(shí),當(dāng)用戶沒(méi)有顯式地定義事務(wù)時(shí),dbms按缺省規(guī)定自動(dòng)劃分事務(wù)按缺省規(guī)定自動(dòng)劃分事務(wù)n顯式定義方式顯式定義方式 n事務(wù)的事務(wù)的開(kāi)始開(kāi)始與與結(jié)束結(jié)束由用戶顯式控制。定義事務(wù)的語(yǔ)句由用戶顯式控制。定義事務(wù)的語(yǔ)句有三條:有三條:n begin transactionbegin transaction sql sql 語(yǔ)句語(yǔ)句 . commit commit rollback rollbacknbegin transactionbegin transaction表示事務(wù)的開(kāi)始;表示事務(wù)的開(kāi)始;ncommitcommit表示事務(wù)的提交表示事務(wù)的提交 (事務(wù)正常結(jié)束事務(wù)正常結(jié)束 提交提交事務(wù)的所有操
6、作事務(wù)的所有操作(讀讀+ +更新更新),事務(wù)中所有事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新寫(xiě)回到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中去,對(duì)數(shù)據(jù)庫(kù)的更新寫(xiě)回到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中去, 事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新永久永久生效)生效)rollbackrollback表示事務(wù)的回滾,即在事務(wù)運(yùn)行的過(guò)程中發(fā)生表示事務(wù)的回滾,即在事務(wù)運(yùn)行的過(guò)程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的庫(kù)的所有已完成的更新操作更新操作全部撤銷(xiāo),再回滾到事務(wù)開(kāi)全部撤銷(xiāo),再回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)始時(shí)的狀態(tài)。n事務(wù)異常終止事務(wù)異常終止n事務(wù)運(yùn)行的過(guò)程中發(fā)生了故障,
7、不能繼續(xù)執(zhí)行事務(wù)運(yùn)行的過(guò)程中發(fā)生了故障,不能繼續(xù)執(zhí)行n回滾事務(wù)的所有回滾事務(wù)的所有更新更新操作,所有已完成的操作,所有已完成的更新操作更新操作全部撤銷(xiāo)全部撤銷(xiāo)n事務(wù)滾回到事務(wù)滾回到開(kāi)始開(kāi)始時(shí)的狀態(tài)時(shí)的狀態(tài)10.1.2 10.1.2 事務(wù)的特征事務(wù)的特征n事務(wù)是由有限的數(shù)據(jù)庫(kù)操作序列組成,但并不是任意的數(shù)據(jù)事務(wù)是由有限的數(shù)據(jù)庫(kù)操作序列組成,但并不是任意的數(shù)據(jù)庫(kù)操作序列都能成為事務(wù),為了保護(hù)數(shù)據(jù)的完整性,一般要庫(kù)操作序列都能成為事務(wù),為了保護(hù)數(shù)據(jù)的完整性,一般要求事務(wù)具有以下四個(gè)特征:原子性求事務(wù)具有以下四個(gè)特征:原子性 一致性一致性 隔離性隔離性 持久性持久性 acidacid準(zhǔn)則準(zhǔn)則1 1原子
8、性(原子性(atomicatomic)n一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)在執(zhí)行時(shí),應(yīng)該一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)在執(zhí)行時(shí),應(yīng)該遵守遵守“要么不做,要么全做要么不做,要么全做”(nothing or allnothing or all)的原則,)的原則,即不允許事務(wù)部分的完成。即不允許事務(wù)部分的完成。n如果事務(wù)因故障沒(méi)有完成,則該事務(wù)已做的操作認(rèn)為是無(wú)效如果事務(wù)因故障沒(méi)有完成,則該事務(wù)已做的操作認(rèn)為是無(wú)效的,在恢復(fù)時(shí)必須取消該事務(wù)對(duì)數(shù)據(jù)庫(kù)的影響的,在恢復(fù)時(shí)必須取消該事務(wù)對(duì)數(shù)據(jù)庫(kù)的影響n保證原子性的思路:對(duì)于要執(zhí)行寫(xiě)操作的數(shù)據(jù)項(xiàng),在磁盤(pán)上保證原子性的思路:對(duì)于要執(zhí)行寫(xiě)操作的數(shù)據(jù)項(xiàng)
9、,在磁盤(pán)上記錄其舊值,若事務(wù)沒(méi)能完成執(zhí)行,舊值將被恢復(fù),好像事記錄其舊值,若事務(wù)沒(méi)能完成執(zhí)行,舊值將被恢復(fù),好像事務(wù)從未執(zhí)行務(wù)從未執(zhí)行n保證原子性是保證原子性是dbmsdbms本身的責(zé)任,由本身的責(zé)任,由“事務(wù)管理部件事務(wù)管理部件”處理。處理。2 2一致性(一致性(consistencyconsistency)n事務(wù)對(duì)數(shù)據(jù)庫(kù)的作用是數(shù)據(jù)庫(kù)從一個(gè)一致?tīng)顟B(tài)轉(zhuǎn)變到事務(wù)對(duì)數(shù)據(jù)庫(kù)的作用是數(shù)據(jù)庫(kù)從一個(gè)一致?tīng)顟B(tài)轉(zhuǎn)變到另一個(gè)一致?tīng)顟B(tài)。另一個(gè)一致?tīng)顟B(tài)。n所謂數(shù)據(jù)庫(kù)的一致?tīng)顟B(tài)是指數(shù)據(jù)庫(kù)中的數(shù)據(jù)滿足完整所謂數(shù)據(jù)庫(kù)的一致?tīng)顟B(tài)是指數(shù)據(jù)庫(kù)中的數(shù)據(jù)滿足完整性約束。性約束。n例如,銀行企業(yè)中,例如,銀行企業(yè)中,“從帳號(hào)從帳號(hào)
10、a a轉(zhuǎn)移資金額轉(zhuǎn)移資金額r r到帳到帳號(hào)號(hào)b”b”是一個(gè)典型的事務(wù),這個(gè)事務(wù)包括兩個(gè)操是一個(gè)典型的事務(wù),這個(gè)事務(wù)包括兩個(gè)操作,從帳號(hào)作,從帳號(hào)a a中減去資金額中減去資金額r r和在帳號(hào)和在帳號(hào)b b中增加資中增加資金額金額r r。n定義一個(gè)事務(wù),該事務(wù)包括兩個(gè)操作定義一個(gè)事務(wù),該事務(wù)包括兩個(gè)操作n這兩個(gè)操作要么全做,要么全不做這兩個(gè)操作要么全做,要么全不做n全做或者全不做,數(shù)據(jù)庫(kù)都處于一致性狀態(tài)。全做或者全不做,數(shù)據(jù)庫(kù)都處于一致性狀態(tài)。n如果只做一個(gè)操作,數(shù)據(jù)庫(kù)就處于不一致性狀態(tài)如果只做一個(gè)操作,數(shù)據(jù)庫(kù)就處于不一致性狀態(tài)。 可見(jiàn)事務(wù)的一致性與原子性是密切相關(guān)的??梢?jiàn)事務(wù)的一致性與原子性是密
11、切相關(guān)的。n確保單個(gè)事務(wù)的一致性是對(duì)該事務(wù)編碼的應(yīng)用,確保單個(gè)事務(wù)的一致性是對(duì)該事務(wù)編碼的應(yīng)用,程序程序員的責(zé)任。員的責(zé)任。3 3隔離性(隔離性(isolationisolation)n一個(gè)事務(wù)的執(zhí)行不能被其它事務(wù)干擾。一個(gè)事務(wù)的執(zhí)行不能被其它事務(wù)干擾。n如果多個(gè)事務(wù)并發(fā)地執(zhí)行,應(yīng)像各個(gè)事務(wù)獨(dú)立執(zhí)如果多個(gè)事務(wù)并發(fā)地執(zhí)行,應(yīng)像各個(gè)事務(wù)獨(dú)立執(zhí)行一樣。行一樣。事務(wù)事務(wù)并發(fā)執(zhí)行的并發(fā)執(zhí)行的結(jié)果和結(jié)果和某一串行執(zhí)行某一串行執(zhí)行的的結(jié)果相同結(jié)果相同。n事務(wù)并發(fā)執(zhí)行的相對(duì)獨(dú)立性,這是事務(wù)并發(fā)控制事務(wù)并發(fā)執(zhí)行的相對(duì)獨(dú)立性,這是事務(wù)并發(fā)控制的目標(biāo)。的目標(biāo)。n并發(fā)控制就是為了保證事務(wù)間的隔離性并發(fā)控制就是為了保證
12、事務(wù)間的隔離性n隔離性保證:多個(gè)事務(wù)并發(fā)執(zhí)行的結(jié)果和某一串隔離性保證:多個(gè)事務(wù)并發(fā)執(zhí)行的結(jié)果和某一串行執(zhí)行的結(jié)果相同行執(zhí)行的結(jié)果相同t1的修改被的修改被t2覆蓋了覆蓋了!讀讀a=16aa-3寫(xiě)回寫(xiě)回a=13讀讀a=16aa-1寫(xiě)回寫(xiě)回a=15t2t14 4持久性(持久性(durabilitydurability)n指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫(kù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫(kù)因故障而受到破壞,因故障而受到破壞,dbmsdbms也應(yīng)該能夠恢也應(yīng)該能夠恢復(fù)。復(fù)。n事務(wù)上述四個(gè)性質(zhì)的英文術(shù)語(yǔ)的第一個(gè)字母為事務(wù)上述四個(gè)性質(zhì)的英文
13、術(shù)語(yǔ)的第一個(gè)字母為acidacid。因此,這四。因此,這四個(gè)性質(zhì)以稱為事務(wù)的個(gè)性質(zhì)以稱為事務(wù)的acidacid準(zhǔn)則。準(zhǔn)則。n下面是一個(gè)事務(wù)的例子,從帳號(hào)下面是一個(gè)事務(wù)的例子,從帳號(hào)a a轉(zhuǎn)移資金額轉(zhuǎn)移資金額r r到帳號(hào)到帳號(hào)b b:begin transactionbegin transaction read a aa-r if a0/* a 款不足款不足*/ then begin display “a款不足款不足”rollback endelse /* 撥款撥款 */ begin bb+r display “撥款完成撥款完成” commit endn這是對(duì)一個(gè)簡(jiǎn)單事務(wù)的完整的描述。這是對(duì)一個(gè)
14、簡(jiǎn)單事務(wù)的完整的描述。n該事務(wù)有兩個(gè)出口:該事務(wù)有兩個(gè)出口:n當(dāng)當(dāng)a 帳號(hào)的款項(xiàng)不足時(shí),事務(wù)以帳號(hào)的款項(xiàng)不足時(shí),事務(wù)以rollback(撤銷(xiāo))命令結(jié)束,即撤銷(xiāo)該事務(wù)的影響;(撤銷(xiāo))命令結(jié)束,即撤銷(xiāo)該事務(wù)的影響;n另一個(gè)出口是以另一個(gè)出口是以commit(提交)命令結(jié)束,(提交)命令結(jié)束,完成從帳號(hào)完成從帳號(hào)a到帳號(hào)到帳號(hào)b的撥款。的撥款。n在在commit之前,即在數(shù)據(jù)庫(kù)修改過(guò)程中,數(shù)據(jù)可之前,即在數(shù)據(jù)庫(kù)修改過(guò)程中,數(shù)據(jù)可能是不一致的,事務(wù)本身也可能被撤銷(xiāo)。能是不一致的,事務(wù)本身也可能被撤銷(xiāo)。n只有在只有在commit之后,事務(wù)對(duì)數(shù)據(jù)庫(kù)所產(chǎn)生的變化之后,事務(wù)對(duì)數(shù)據(jù)庫(kù)所產(chǎn)生的變化才對(duì)其他事務(wù)開(kāi)放
15、,這就可以避免其他事務(wù)訪問(wèn)不一才對(duì)其他事務(wù)開(kāi)放,這就可以避免其他事務(wù)訪問(wèn)不一致或不存在的數(shù)據(jù)致或不存在的數(shù)據(jù)。 n事務(wù)的事務(wù)的acid特性可能遭到破壞的因素有:特性可能遭到破壞的因素有:1、多個(gè)事務(wù)并發(fā)運(yùn)行,不同事務(wù)的操作交叉執(zhí)行多個(gè)事務(wù)并發(fā)運(yùn)行,不同事務(wù)的操作交叉執(zhí)行;(dbms必須保證在此種情況下多個(gè)事務(wù)的交叉運(yùn)必須保證在此種情況下多個(gè)事務(wù)的交叉運(yùn)行不影響這些事務(wù)的原子性,這是行不影響這些事務(wù)的原子性,這是dbms中的并中的并發(fā)控制機(jī)制的責(zé)任。發(fā)控制機(jī)制的責(zé)任。)2、事務(wù)在運(yùn)行過(guò)程中被強(qiáng)行停止。事務(wù)在運(yùn)行過(guò)程中被強(qiáng)行停止。(dbms必須保證必須保證被強(qiáng)行終止的事務(wù)對(duì)數(shù)據(jù)庫(kù)和其它事務(wù)沒(méi)有任何
16、被強(qiáng)行終止的事務(wù)對(duì)數(shù)據(jù)庫(kù)和其它事務(wù)沒(méi)有任何影響,這是影響,這是dbms中的恢復(fù)機(jī)制的責(zé)任中的恢復(fù)機(jī)制的責(zé)任。)10.2 10.2 數(shù)據(jù)庫(kù)的恢復(fù)數(shù)據(jù)庫(kù)的恢復(fù)10.2.1 10.2.1 數(shù)據(jù)庫(kù)恢復(fù)的含義數(shù)據(jù)庫(kù)恢復(fù)的含義n雖然數(shù)據(jù)庫(kù)系統(tǒng)中已采取一定的措施,來(lái)防止數(shù)據(jù)庫(kù)雖然數(shù)據(jù)庫(kù)系統(tǒng)中已采取一定的措施,來(lái)防止數(shù)據(jù)庫(kù)的安全性和完整性的破壞,保證并發(fā)事務(wù)的正確執(zhí)行,的安全性和完整性的破壞,保證并發(fā)事務(wù)的正確執(zhí)行,但數(shù)據(jù)庫(kù)中的數(shù)據(jù)仍然無(wú)法保證絕對(duì)不遭受破壞,比但數(shù)據(jù)庫(kù)中的數(shù)據(jù)仍然無(wú)法保證絕對(duì)不遭受破壞,比如計(jì)算機(jī)系統(tǒng)中硬件的故障、軟件的的錯(cuò)誤,操作員如計(jì)算機(jī)系統(tǒng)中硬件的故障、軟件的的錯(cuò)誤,操作員的失誤,惡意
17、的破壞等都有可能發(fā)生,這些故障的發(fā)的失誤,惡意的破壞等都有可能發(fā)生,這些故障的發(fā)生影響數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性,甚至可能破壞數(shù)據(jù)庫(kù),生影響數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性,甚至可能破壞數(shù)據(jù)庫(kù),使數(shù)據(jù)庫(kù)中的數(shù)據(jù)全部或部分丟失。使數(shù)據(jù)庫(kù)中的數(shù)據(jù)全部或部分丟失。n數(shù)據(jù)庫(kù)的恢復(fù):數(shù)據(jù)庫(kù)的恢復(fù):把數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)恢復(fù)到某一已知把數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)的正確狀態(tài)( (亦稱為一致?tīng)顟B(tài)或完整狀態(tài)亦稱為一致?tīng)顟B(tài)或完整狀態(tài)) ) 10.3 10.3 故障的種類(lèi)故障的種類(lèi)事務(wù)內(nèi)部事務(wù)內(nèi)部,系統(tǒng)故障系統(tǒng)故障,介質(zhì)故障介質(zhì)故障,計(jì)算機(jī)病毒計(jì)算機(jī)病毒1、事務(wù)內(nèi)部的故障、事務(wù)內(nèi)部的故障n有的是預(yù)期的(可以通過(guò)事務(wù)程序本身發(fā)現(xiàn)
18、的有的是預(yù)期的(可以通過(guò)事務(wù)程序本身發(fā)現(xiàn)的)n有的是非預(yù)期的有的是非預(yù)期的begin transactionbegin transaction read a aa-r if a0/* a 款不足款不足*/ then begin display “a款不足款不足”rollback endelse /* 撥款撥款 */ begin bb+r display “撥款完成撥款完成” commit end預(yù)期到的故障,發(fā)現(xiàn)預(yù)期到的故障,發(fā)現(xiàn)余額不足,則讓事務(wù)余額不足,則讓事務(wù)滾回,撤消已做的更滾回,撤消已做的更改,恢復(fù)數(shù)據(jù)庫(kù)到正改,恢復(fù)數(shù)據(jù)庫(kù)到正確的狀態(tài)。確的狀態(tài)。n事務(wù)內(nèi)部更多的故障是非預(yù)期的,是不能
19、由事務(wù)內(nèi)部更多的故障是非預(yù)期的,是不能由應(yīng)用程序處理的。如運(yùn)算溢出、并發(fā)事務(wù)死應(yīng)用程序處理的。如運(yùn)算溢出、并發(fā)事務(wù)死鎖等。以后,我們指的事務(wù)故障僅指這一類(lèi)鎖等。以后,我們指的事務(wù)故障僅指這一類(lèi)非預(yù)期的故障。非預(yù)期的故障。n事務(wù)故障意味著事務(wù)沒(méi)有達(dá)到預(yù)期的終點(diǎn)事務(wù)故障意味著事務(wù)沒(méi)有達(dá)到預(yù)期的終點(diǎn)(commit 或者顯式的或者顯式的rollback),因此,因此,數(shù)據(jù)庫(kù)可能處于不正確的狀態(tài)?;謴?fù)程序要數(shù)據(jù)庫(kù)可能處于不正確的狀態(tài)。恢復(fù)程序要在不影響其它事務(wù)運(yùn)行的前提下,強(qiáng)行回滾在不影響其它事務(wù)運(yùn)行的前提下,強(qiáng)行回滾(rollback)該事務(wù),該事務(wù),撤消該事務(wù)已經(jīng)作撤消該事務(wù)已經(jīng)作出的任何對(duì)數(shù)據(jù)庫(kù)的
20、修改,使得該事務(wù)好象出的任何對(duì)數(shù)據(jù)庫(kù)的修改,使得該事務(wù)好象根本沒(méi)有啟動(dòng)一樣根本沒(méi)有啟動(dòng)一樣。這類(lèi)恢復(fù)操作稱為。這類(lèi)恢復(fù)操作稱為事務(wù)事務(wù)撤消撤消(undo)。2、系統(tǒng)故障、系統(tǒng)故障n系統(tǒng)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于某種原因,系統(tǒng)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于某種原因,造成系統(tǒng)停止運(yùn)轉(zhuǎn),致使所有正在運(yùn)行的事務(wù)都造成系統(tǒng)停止運(yùn)轉(zhuǎn),致使所有正在運(yùn)行的事務(wù)都以非正常方式終止,要求系統(tǒng)重新啟動(dòng)。以非正常方式終止,要求系統(tǒng)重新啟動(dòng)。n引起系統(tǒng)故障的原因可能有:硬件錯(cuò)誤如引起系統(tǒng)故障的原因可能有:硬件錯(cuò)誤如cpucpu故故障、操作系統(tǒng)或障、操作系統(tǒng)或dbmsdbms代碼錯(cuò)誤、突然斷電等。代碼錯(cuò)誤、突然斷電等
21、。n這時(shí),內(nèi)存中數(shù)據(jù)庫(kù)緩沖區(qū)的內(nèi)容全部丟失,存這時(shí),內(nèi)存中數(shù)據(jù)庫(kù)緩沖區(qū)的內(nèi)容全部丟失,存儲(chǔ)在外部存儲(chǔ)設(shè)備上的數(shù)據(jù)庫(kù)并未破壞,但內(nèi)容儲(chǔ)在外部存儲(chǔ)設(shè)備上的數(shù)據(jù)庫(kù)并未破壞,但內(nèi)容不可靠了不可靠了。n發(fā)生系統(tǒng)故障時(shí),事務(wù)未提交發(fā)生系統(tǒng)故障時(shí),事務(wù)未提交n恢復(fù)策略:強(qiáng)行撤消(恢復(fù)策略:強(qiáng)行撤消(undo)所有未完成事務(wù))所有未完成事務(wù)n發(fā)生系統(tǒng)故障時(shí),事務(wù)已提交,但緩沖區(qū)中的信息發(fā)生系統(tǒng)故障時(shí),事務(wù)已提交,但緩沖區(qū)中的信息尚未完全寫(xiě)回到磁盤(pán)上尚未完全寫(xiě)回到磁盤(pán)上。n恢復(fù)策略:重做(恢復(fù)策略:重做(redo)所有已提交的事務(wù))所有已提交的事務(wù)n重做(重做(redo):有些己提交的事務(wù)對(duì)數(shù)據(jù)庫(kù)的有些己提交的
22、事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新結(jié)果還保留在緩沖區(qū)中,尚未寫(xiě)到磁盤(pán)上的更新結(jié)果還保留在緩沖區(qū)中,尚未寫(xiě)到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中,這也使數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),物理數(shù)據(jù)庫(kù)中,這也使數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),因此應(yīng)將這些事務(wù)己提交的結(jié)果重新寫(xiě)入數(shù)據(jù)庫(kù)因此應(yīng)將這些事務(wù)己提交的結(jié)果重新寫(xiě)入數(shù)據(jù)庫(kù)3 3、介質(zhì)故障、介質(zhì)故障n介質(zhì)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于存儲(chǔ)器介質(zhì)受到破壞,介質(zhì)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于存儲(chǔ)器介質(zhì)受到破壞,使存儲(chǔ)在外存中的數(shù)據(jù)部分丟失或全部丟失。使存儲(chǔ)在外存中的數(shù)據(jù)部分丟失或全部丟失。n這類(lèi)故障比事務(wù)故障和系統(tǒng)故障發(fā)生的可能性要小,但這是這類(lèi)故障比事務(wù)故障和系統(tǒng)故障發(fā)生的可能性要小,但這是最嚴(yán)重的一種
23、故障,破壞性很大最嚴(yán)重的一種故障,破壞性很大。4、計(jì)算機(jī)病毒、計(jì)算機(jī)病毒n一種人為的故障或破壞,是一些惡作劇者研制的一種計(jì)算機(jī)一種人為的故障或破壞,是一些惡作劇者研制的一種計(jì)算機(jī)程序程序n可以繁殖和傳播可以繁殖和傳播n危害危害n破壞、盜竊系統(tǒng)中的數(shù)據(jù)破壞、盜竊系統(tǒng)中的數(shù)據(jù)n破壞系統(tǒng)文件破壞系統(tǒng)文件故障小結(jié)n各類(lèi)故障,對(duì)數(shù)據(jù)庫(kù)的影響有兩種可能性各類(lèi)故障,對(duì)數(shù)據(jù)庫(kù)的影響有兩種可能性n一是數(shù)據(jù)庫(kù)本身被破壞一是數(shù)據(jù)庫(kù)本身被破壞n二是數(shù)據(jù)庫(kù)沒(méi)有被破壞,但數(shù)據(jù)可能不正確,這二是數(shù)據(jù)庫(kù)沒(méi)有被破壞,但數(shù)據(jù)可能不正確,這是由于事務(wù)的運(yùn)行被非正常終止造成的是由于事務(wù)的運(yùn)行被非正常終止造成的。 10.4 10.4
24、恢復(fù)的原理及其實(shí)現(xiàn)技術(shù)恢復(fù)的原理及其實(shí)現(xiàn)技術(shù)n數(shù)據(jù)庫(kù)恢復(fù)的數(shù)據(jù)庫(kù)恢復(fù)的基本原理十分簡(jiǎn)單,就是數(shù)據(jù)的冗余基本原理十分簡(jiǎn)單,就是數(shù)據(jù)的冗余。n數(shù)據(jù)庫(kù)中任何一部分被破壞的或不正確的數(shù)據(jù)都可以數(shù)據(jù)庫(kù)中任何一部分被破壞的或不正確的數(shù)據(jù)都可以利用存儲(chǔ)在系統(tǒng)其它地方的冗余數(shù)據(jù)來(lái)修復(fù)。利用存儲(chǔ)在系統(tǒng)其它地方的冗余數(shù)據(jù)來(lái)修復(fù)。n因此恢復(fù)系統(tǒng)應(yīng)該提供兩種類(lèi)型的功能:因此恢復(fù)系統(tǒng)應(yīng)該提供兩種類(lèi)型的功能:n一種是一種是生成冗余數(shù)據(jù)生成冗余數(shù)據(jù),即對(duì)可能發(fā)生的故障作某些,即對(duì)可能發(fā)生的故障作某些準(zhǔn)備;準(zhǔn)備;n另一種是另一種是冗余重建冗余重建,即利用這些冗余數(shù)據(jù)恢復(fù)數(shù)據(jù),即利用這些冗余數(shù)據(jù)恢復(fù)數(shù)據(jù)庫(kù)。庫(kù)。n生成冗余數(shù)據(jù)最
25、常用的技術(shù)是生成冗余數(shù)據(jù)最常用的技術(shù)是登記日志文件登記日志文件和和數(shù)據(jù)轉(zhuǎn)數(shù)據(jù)轉(zhuǎn)儲(chǔ)儲(chǔ),在實(shí)際應(yīng)用中,這兩種方法常常結(jié)合起來(lái)一起使在實(shí)際應(yīng)用中,這兩種方法常常結(jié)合起來(lái)一起使用。用。 10.4.1 10.4.1 登記日志文件(登記日志文件(logginglogging)n日志文件日志文件是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。對(duì)數(shù)據(jù)庫(kù)的每次修改,都將被修改項(xiàng)目的對(duì)數(shù)據(jù)庫(kù)的每次修改,都將被修改項(xiàng)目的舊值和新值舊值和新值寫(xiě)在一個(gè)叫做運(yùn)行日志的文件中,寫(xiě)在一個(gè)叫做運(yùn)行日志的文件中,目的目的是為數(shù)據(jù)庫(kù)的是為數(shù)據(jù)庫(kù)的恢復(fù)保留詳細(xì)的數(shù)據(jù)。恢復(fù)保留詳細(xì)的數(shù)據(jù)。n典型的日志文
26、件主要包含以下內(nèi)容:典型的日志文件主要包含以下內(nèi)容:1 1更新數(shù)據(jù)庫(kù)的事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù));更新數(shù)據(jù)庫(kù)的事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù));2 2操作的類(lèi)型(插入、刪除或修改)操作的類(lèi)型(插入、刪除或修改)3 3操作對(duì)象;操作對(duì)象;4 4更新前數(shù)據(jù)的舊值(對(duì)于插入操作而言,沒(méi)有舊更新前數(shù)據(jù)的舊值(對(duì)于插入操作而言,沒(méi)有舊值);值);5 5更新前數(shù)據(jù)的新值(對(duì)于刪除操作而言,沒(méi)有新更新前數(shù)據(jù)的新值(對(duì)于刪除操作而言,沒(méi)有新值);值);6 6事務(wù)處理中的各個(gè)關(guān)鍵時(shí)刻(事務(wù)的開(kāi)始、結(jié)束及事務(wù)處理中的各個(gè)關(guān)鍵時(shí)刻(事務(wù)的開(kāi)始、結(jié)束及其真正回寫(xiě)的時(shí)間)。其真正回寫(xiě)的時(shí)間)。n日志文件是系統(tǒng)運(yùn)行的歷史記載,
27、必須高度可靠。日志文件是系統(tǒng)運(yùn)行的歷史記載,必須高度可靠。n所以一般都是所以一般都是雙副本雙副本的,并且獨(dú)立地寫(xiě)在兩個(gè)不同類(lèi)型的,并且獨(dú)立地寫(xiě)在兩個(gè)不同類(lèi)型的設(shè)備上。的設(shè)備上。n日志的日志的信息量很大信息量很大,一般保存在海量存儲(chǔ)器上。,一般保存在海量存儲(chǔ)器上。n在對(duì)在對(duì)數(shù)據(jù)庫(kù)修改數(shù)據(jù)庫(kù)修改時(shí),在運(yùn)行日志中要時(shí),在運(yùn)行日志中要寫(xiě)入一個(gè)表示這個(gè)寫(xiě)入一個(gè)表示這個(gè)修改的運(yùn)行記錄。修改的運(yùn)行記錄。n把把數(shù)據(jù)庫(kù)的修改寫(xiě)到數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)的修改寫(xiě)到數(shù)據(jù)庫(kù)和把表示和把表示這個(gè)修改的日志記這個(gè)修改的日志記錄寫(xiě)到日志文件錄寫(xiě)到日志文件是兩個(gè)不同的操作。是兩個(gè)不同的操作。n為了防止在這兩個(gè)操作之間發(fā)生故障后,運(yùn)行日志
28、中沒(méi)為了防止在這兩個(gè)操作之間發(fā)生故障后,運(yùn)行日志中沒(méi)有記錄下這個(gè)修改,以后也無(wú)法撤消這個(gè)修改。為保證有記錄下這個(gè)修改,以后也無(wú)法撤消這個(gè)修改。為保證數(shù)據(jù)庫(kù)是可恢復(fù)的,登記日志文件必須遵循兩條原則原數(shù)據(jù)庫(kù)是可恢復(fù)的,登記日志文件必須遵循兩條原則原則:則:n1.1.登記的次序嚴(yán)格按并發(fā)事務(wù)執(zhí)行的時(shí)間登記的次序嚴(yán)格按并發(fā)事務(wù)執(zhí)行的時(shí)間次序;次序;n2.2.必須先寫(xiě)日志文件,后寫(xiě)數(shù)據(jù)庫(kù)。必須先寫(xiě)日志文件,后寫(xiě)數(shù)據(jù)庫(kù)。n先寫(xiě)原則蘊(yùn)含了如下意義:如果出現(xiàn)故障,只先寫(xiě)原則蘊(yùn)含了如下意義:如果出現(xiàn)故障,只可能是在日志文件中已經(jīng)登記了所做的修改,可能是在日志文件中已經(jīng)登記了所做的修改,但沒(méi)有真正修改數(shù)據(jù)庫(kù),這樣
29、在系統(tǒng)重新啟動(dòng)但沒(méi)有真正修改數(shù)據(jù)庫(kù),這樣在系統(tǒng)重新啟動(dòng)進(jìn)行恢復(fù)時(shí),只是撤消或重做因發(fā)生事故而沒(méi)進(jìn)行恢復(fù)時(shí),只是撤消或重做因發(fā)生事故而沒(méi)有做過(guò)的修改,并不會(huì)影響數(shù)據(jù)庫(kù)的正確性。有做過(guò)的修改,并不會(huì)影響數(shù)據(jù)庫(kù)的正確性。而如果先寫(xiě)了數(shù)據(jù)庫(kù)修改,而在運(yùn)行記錄中沒(méi)而如果先寫(xiě)了數(shù)據(jù)庫(kù)修改,而在運(yùn)行記錄中沒(méi)有登記這個(gè)修改,則以后就無(wú)法恢復(fù)這個(gè)修改有登記這個(gè)修改,則以后就無(wú)法恢復(fù)這個(gè)修改了。了。10.4.2 10.4.2 數(shù)據(jù)轉(zhuǎn)儲(chǔ)(數(shù)據(jù)轉(zhuǎn)儲(chǔ)(data dumpdata dump)n數(shù)據(jù)轉(zhuǎn)儲(chǔ)是數(shù)據(jù)轉(zhuǎn)儲(chǔ)是指定期地指定期地將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到多個(gè)存儲(chǔ)設(shè)將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到多個(gè)存儲(chǔ)設(shè)備如磁帶、磁盤(pán)上保存起來(lái)的過(guò)程,它是數(shù)
30、據(jù)庫(kù)恢復(fù)備如磁帶、磁盤(pán)上保存起來(lái)的過(guò)程,它是數(shù)據(jù)庫(kù)恢復(fù)中采用的基本手段。中采用的基本手段。n轉(zhuǎn)儲(chǔ)的數(shù)據(jù)文本稱為轉(zhuǎn)儲(chǔ)的數(shù)據(jù)文本稱為后備副本后備副本或或后援副本后援副本,當(dāng)數(shù)據(jù)庫(kù),當(dāng)數(shù)據(jù)庫(kù)遭到破壞后就可利用后援副本把數(shù)據(jù)庫(kù)有效地加以恢遭到破壞后就可利用后援副本把數(shù)據(jù)庫(kù)有效地加以恢復(fù)。復(fù)。n轉(zhuǎn)儲(chǔ)是十分耗費(fèi)時(shí)間和資源的,不能頻繁地進(jìn)行,應(yīng)轉(zhuǎn)儲(chǔ)是十分耗費(fèi)時(shí)間和資源的,不能頻繁地進(jìn)行,應(yīng)該根據(jù)數(shù)據(jù)庫(kù)使用情況確定一個(gè)適當(dāng)?shù)霓D(zhuǎn)儲(chǔ)周期。該根據(jù)數(shù)據(jù)庫(kù)使用情況確定一個(gè)適當(dāng)?shù)霓D(zhuǎn)儲(chǔ)周期。n按照轉(zhuǎn)儲(chǔ)方式轉(zhuǎn)儲(chǔ)可以分為按照轉(zhuǎn)儲(chǔ)方式轉(zhuǎn)儲(chǔ)可以分為海量轉(zhuǎn)儲(chǔ)海量轉(zhuǎn)儲(chǔ)和和增量轉(zhuǎn)儲(chǔ)增量轉(zhuǎn)儲(chǔ)。n海量轉(zhuǎn)儲(chǔ)是指海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)每
31、次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)。n增量轉(zhuǎn)儲(chǔ)每次只增量轉(zhuǎn)儲(chǔ)每次只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后被更新過(guò)的數(shù)據(jù)。轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后被更新過(guò)的數(shù)據(jù)。n按照轉(zhuǎn)儲(chǔ)狀態(tài)轉(zhuǎn)儲(chǔ)又可分為按照轉(zhuǎn)儲(chǔ)狀態(tài)轉(zhuǎn)儲(chǔ)又可分為靜態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ)和和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)。n靜態(tài)轉(zhuǎn)儲(chǔ)期間不允許有任何數(shù)據(jù)存取活動(dòng),因靜態(tài)轉(zhuǎn)儲(chǔ)期間不允許有任何數(shù)據(jù)存取活動(dòng),因而需在當(dāng)前用戶事務(wù)結(jié)束之后進(jìn)行,新用戶事而需在當(dāng)前用戶事務(wù)結(jié)束之后進(jìn)行,新用戶事務(wù)又需在轉(zhuǎn)儲(chǔ)結(jié)束之后才能進(jìn)行,這就降低了務(wù)又需在轉(zhuǎn)儲(chǔ)結(jié)束之后才能進(jìn)行,這就降低了數(shù)據(jù)庫(kù)的可用性。數(shù)據(jù)庫(kù)的可用性。n動(dòng)態(tài)轉(zhuǎn)儲(chǔ)則不同,它允許轉(zhuǎn)儲(chǔ)期間繼續(xù)運(yùn)行用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)則不同,它允許轉(zhuǎn)儲(chǔ)期間繼續(xù)運(yùn)行用戶事務(wù),但產(chǎn)生的副本并不能保證與當(dāng)前狀態(tài)戶事務(wù),
32、但產(chǎn)生的副本并不能保證與當(dāng)前狀態(tài)一致。解決的辦法是把轉(zhuǎn)儲(chǔ)期間各事務(wù)對(duì)數(shù)據(jù)一致。解決的辦法是把轉(zhuǎn)儲(chǔ)期間各事務(wù)對(duì)數(shù)據(jù)庫(kù)的修改活動(dòng)登記下來(lái),建立日志文件。庫(kù)的修改活動(dòng)登記下來(lái),建立日志文件。n因此,因此,備用副本加上日志文件備用副本加上日志文件就能把數(shù)據(jù)庫(kù)恢就能把數(shù)據(jù)庫(kù)恢復(fù)到某一時(shí)刻的正確狀態(tài)。復(fù)到某一時(shí)刻的正確狀態(tài)。10.5 10.5 數(shù)據(jù)庫(kù)恢復(fù)的策略數(shù)據(jù)庫(kù)恢復(fù)的策略n根據(jù)故障類(lèi)型的不同,應(yīng)該采取不同的恢復(fù)策略根據(jù)故障類(lèi)型的不同,應(yīng)該采取不同的恢復(fù)策略。1 1、事務(wù)故障(、事務(wù)故障(transaction failuretransaction failure)及其恢復(fù))及其恢復(fù)n事務(wù)故障表示由非預(yù)
33、期的、不正常的程序結(jié)束所造成事務(wù)故障表示由非預(yù)期的、不正常的程序結(jié)束所造成的故障。的故障。n發(fā)生事務(wù)故障時(shí),被迫中斷的事務(wù)可能已對(duì)數(shù)據(jù)庫(kù)進(jìn)發(fā)生事務(wù)故障時(shí),被迫中斷的事務(wù)可能已對(duì)數(shù)據(jù)庫(kù)進(jìn)行了修改,為了消除該事務(wù)對(duì)數(shù)據(jù)庫(kù)的影響,要利用行了修改,為了消除該事務(wù)對(duì)數(shù)據(jù)庫(kù)的影響,要利用日志文件中所記載的信息,日志文件中所記載的信息,強(qiáng)行回滾(強(qiáng)行回滾(rollbackrollback)該)該事務(wù),將數(shù)據(jù)庫(kù)恢復(fù)到修改前的初始狀態(tài)。事務(wù),將數(shù)據(jù)庫(kù)恢復(fù)到修改前的初始狀態(tài)。n為此,要檢查日志文件中由這些事務(wù)所引起的發(fā)生變?yōu)榇耍獧z查日志文件中由這些事務(wù)所引起的發(fā)生變化的記錄,取消這些沒(méi)有完成的事務(wù)所做的一切改變
34、?;挠涗?,取消這些沒(méi)有完成的事務(wù)所做的一切改變。n這類(lèi)恢復(fù)操作稱為事務(wù)撤消(這類(lèi)恢復(fù)操作稱為事務(wù)撤消(undoundo),具體做法如下:),具體做法如下:1 1反向掃描日志文件反向掃描日志文件,查找該事務(wù)的更新操作。,查找該事務(wù)的更新操作。2 2對(duì)該事務(wù)的更新操作執(zhí)行反操作對(duì)該事務(wù)的更新操作執(zhí)行反操作,即對(duì)已經(jīng)插入,即對(duì)已經(jīng)插入的新記錄進(jìn)行刪除操作,對(duì)已刪除的記錄進(jìn)行插入的新記錄進(jìn)行刪除操作,對(duì)已刪除的記錄進(jìn)行插入操作,對(duì)修改的數(shù)據(jù)恢復(fù)舊值,用舊值代替新值。操作,對(duì)修改的數(shù)據(jù)恢復(fù)舊值,用舊值代替新值。這樣由后向前逐個(gè)掃描該事務(wù)己做所有更新操作,這樣由后向前逐個(gè)掃描該事務(wù)己做所有更新操作,并做
35、同樣處理,直到掃描到此事務(wù)的開(kāi)始標(biāo)記,事并做同樣處理,直到掃描到此事務(wù)的開(kāi)始標(biāo)記,事務(wù)故障恢復(fù)完畢。務(wù)故障恢復(fù)完畢。n因此,一個(gè)事務(wù)是一個(gè)工作單位,也是一個(gè)恢復(fù)單位。因此,一個(gè)事務(wù)是一個(gè)工作單位,也是一個(gè)恢復(fù)單位。n一個(gè)事務(wù)越短,越便于對(duì)它進(jìn)行一個(gè)事務(wù)越短,越便于對(duì)它進(jìn)行undoundo操作。如果一個(gè)操作。如果一個(gè)應(yīng)用程序運(yùn)行時(shí)間較長(zhǎng),則應(yīng)該把該應(yīng)用程序分成多應(yīng)用程序運(yùn)行時(shí)間較長(zhǎng),則應(yīng)該把該應(yīng)用程序分成多個(gè)事務(wù),用明確的個(gè)事務(wù),用明確的commitcommit語(yǔ)句結(jié)束各個(gè)事務(wù)。語(yǔ)句結(jié)束各個(gè)事務(wù)。2 2、系統(tǒng)故障(、系統(tǒng)故障(system failuresystem failure)及其恢復(fù))及
36、其恢復(fù)n系統(tǒng)故障發(fā)生后,對(duì)數(shù)據(jù)庫(kù)的影響有兩種情況:系統(tǒng)故障發(fā)生后,對(duì)數(shù)據(jù)庫(kù)的影響有兩種情況:n一種情況是一些未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新已寫(xiě)入數(shù)一種情況是一些未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新已寫(xiě)入數(shù)據(jù)庫(kù),這樣在系統(tǒng)重新啟動(dòng)后,要強(qiáng)行撤消(據(jù)庫(kù),這樣在系統(tǒng)重新啟動(dòng)后,要強(qiáng)行撤消(undoundo)所有未完成事務(wù),清除這些事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的修改。所有未完成事務(wù),清除這些事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的修改。這些未完成事務(wù)在日志文件中只有這些未完成事務(wù)在日志文件中只有begin transcationbegin transcation標(biāo)記,而無(wú)標(biāo)記,而無(wú)commitcommit標(biāo)記。標(biāo)記。n另一種情況是有些己提交的事務(wù)對(duì)數(shù)據(jù)
37、庫(kù)的更新結(jié)果另一種情況是有些己提交的事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新結(jié)果還保留在緩沖區(qū)中,尚未寫(xiě)到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中,還保留在緩沖區(qū)中,尚未寫(xiě)到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中,這也使數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),因此應(yīng)將這些事務(wù)己這也使數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),因此應(yīng)將這些事務(wù)己提交的結(jié)果重新寫(xiě)入數(shù)據(jù)庫(kù)。這類(lèi)恢復(fù)操作稱為事務(wù)提交的結(jié)果重新寫(xiě)入數(shù)據(jù)庫(kù)。這類(lèi)恢復(fù)操作稱為事務(wù)的重做(的重做(redoredo)。這種己提交事務(wù)在日志文件中既有)。這種己提交事務(wù)在日志文件中既有begin transcationbegin transcation標(biāo)記,也有標(biāo)記,也有commitcommit標(biāo)記標(biāo)記。n因此,系統(tǒng)故障的恢復(fù)要完成兩方面的工作
38、,既要撤因此,系統(tǒng)故障的恢復(fù)要完成兩方面的工作,既要撤消所有未完成的事務(wù),還需要重做所有己提交的事務(wù),消所有未完成的事務(wù),還需要重做所有己提交的事務(wù),這樣才能將數(shù)據(jù)庫(kù)真正恢復(fù)到一致的狀態(tài)。具體做法這樣才能將數(shù)據(jù)庫(kù)真正恢復(fù)到一致的狀態(tài)。具體做法如下:如下:1 1正向掃描日志文件,查找尚未提交的事務(wù),將其正向掃描日志文件,查找尚未提交的事務(wù),將其事務(wù)標(biāo)識(shí)記入撤消隊(duì)列。同時(shí)查找已經(jīng)提交的事事務(wù)標(biāo)識(shí)記入撤消隊(duì)列。同時(shí)查找已經(jīng)提交的事務(wù),將其事務(wù)標(biāo)識(shí)記入重做隊(duì)列。務(wù),將其事務(wù)標(biāo)識(shí)記入重做隊(duì)列。2 2對(duì)撤消隊(duì)列中的各個(gè)事務(wù)進(jìn)行撤消處理。方法同對(duì)撤消隊(duì)列中的各個(gè)事務(wù)進(jìn)行撤消處理。方法同事務(wù)故障中所介紹的撤消
39、方法相同。事務(wù)故障中所介紹的撤消方法相同。3 3對(duì)重做隊(duì)列中的各個(gè)事務(wù)進(jìn)行重做處理。進(jìn)行重對(duì)重做隊(duì)列中的各個(gè)事務(wù)進(jìn)行重做處理。進(jìn)行重做處理的方法是:正向掃描日志文件,按照日志做處理的方法是:正向掃描日志文件,按照日志文件中所登記的操作內(nèi)容,重新執(zhí)行操作,使數(shù)文件中所登記的操作內(nèi)容,重新執(zhí)行操作,使數(shù)據(jù)庫(kù)恢復(fù)到最近某個(gè)可用狀態(tài)。據(jù)庫(kù)恢復(fù)到最近某個(gè)可用狀態(tài)。3 3、介質(zhì)故障(、介質(zhì)故障(media failuremedia failure)及其恢復(fù))及其恢復(fù)n介質(zhì)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于輔助存儲(chǔ)器介質(zhì)介質(zhì)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于輔助存儲(chǔ)器介質(zhì)受到破壞,使存儲(chǔ)在外存中的數(shù)據(jù)部分丟失或全部
40、丟失。受到破壞,使存儲(chǔ)在外存中的數(shù)據(jù)部分丟失或全部丟失。n這需要裝入發(fā)生介質(zhì)故障前最新的后備數(shù)據(jù)庫(kù)副本,然這需要裝入發(fā)生介質(zhì)故障前最新的后備數(shù)據(jù)庫(kù)副本,然后利用日志文件重做該副本后所運(yùn)行的所有事務(wù)。后利用日志文件重做該副本后所運(yùn)行的所有事務(wù)。n具體方法如下:具體方法如下:1裝入最新的數(shù)據(jù)庫(kù)副本,使數(shù)據(jù)庫(kù)恢復(fù)到最近一次裝入最新的數(shù)據(jù)庫(kù)副本,使數(shù)據(jù)庫(kù)恢復(fù)到最近一次轉(zhuǎn)儲(chǔ)時(shí)的可用狀態(tài)。轉(zhuǎn)儲(chǔ)時(shí)的可用狀態(tài)。2裝入最新的日志文件副本,根據(jù)日志文件中的內(nèi)容裝入最新的日志文件副本,根據(jù)日志文件中的內(nèi)容重做已完成的事務(wù)。首先正向掃描日志文件,找出發(fā)重做已完成的事務(wù)。首先正向掃描日志文件,找出發(fā)生故障前已提交的事務(wù)
41、,將其記入重做隊(duì)例。再對(duì)重生故障前已提交的事務(wù),將其記入重做隊(duì)例。再對(duì)重做隊(duì)列中的各個(gè)事務(wù)進(jìn)行重做處理,做隊(duì)列中的各個(gè)事務(wù)進(jìn)行重做處理,n通過(guò)以上對(duì)三類(lèi)故障的分析,我們可以看出故障發(fā)生后通過(guò)以上對(duì)三類(lèi)故障的分析,我們可以看出故障發(fā)生后對(duì)數(shù)據(jù)庫(kù)的影響有兩種可能性:對(duì)數(shù)據(jù)庫(kù)的影響有兩種可能性:1數(shù)據(jù)庫(kù)沒(méi)有被破壞,但數(shù)據(jù)可能處于不一致?tīng)顟B(tài)。這數(shù)據(jù)庫(kù)沒(méi)有被破壞,但數(shù)據(jù)可能處于不一致?tīng)顟B(tài)。這是由事務(wù)故障和系統(tǒng)故障引起的,這種情況在恢復(fù)時(shí),是由事務(wù)故障和系統(tǒng)故障引起的,這種情況在恢復(fù)時(shí),不需要重裝數(shù)據(jù)庫(kù)副本,直接根據(jù)日志文件,不需要重裝數(shù)據(jù)庫(kù)副本,直接根據(jù)日志文件,撤銷(xiāo)故撤銷(xiāo)故障發(fā)生時(shí)未完成的事務(wù)障發(fā)生時(shí)
42、未完成的事務(wù),并,并重做己完成的事務(wù)重做己完成的事務(wù),使數(shù),使數(shù)據(jù)庫(kù)恢復(fù)到正確的狀態(tài)。這類(lèi)故障的恢復(fù)是系統(tǒng)在重?fù)?jù)庫(kù)恢復(fù)到正確的狀態(tài)。這類(lèi)故障的恢復(fù)是系統(tǒng)在重新啟動(dòng)時(shí)自動(dòng)完成的,不需要用戶干預(yù)。新啟動(dòng)時(shí)自動(dòng)完成的,不需要用戶干預(yù)。2數(shù)據(jù)庫(kù)本身被破壞。這是由介質(zhì)故障引起的,這種情數(shù)據(jù)庫(kù)本身被破壞。這是由介質(zhì)故障引起的,這種情況在恢復(fù)時(shí),把最近一次轉(zhuǎn)儲(chǔ)的數(shù)據(jù)裝入,然后況在恢復(fù)時(shí),把最近一次轉(zhuǎn)儲(chǔ)的數(shù)據(jù)裝入,然后借助借助于日志文件于日志文件,再在此基礎(chǔ)上對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新,從而,再在此基礎(chǔ)上對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新,從而重建了數(shù)據(jù)庫(kù)。這類(lèi)重建了數(shù)據(jù)庫(kù)。這類(lèi)故障的恢復(fù)不能自動(dòng)完成故障的恢復(fù)不能自動(dòng)完成,需要,需要d
43、ba的介入,先由的介入,先由dba重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本和重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本和相應(yīng)的日志文件的副本,再執(zhí)行系統(tǒng)提供的恢復(fù)命令,相應(yīng)的日志文件的副本,再執(zhí)行系統(tǒng)提供的恢復(fù)命令,具體的恢復(fù)操作由具體的恢復(fù)操作由dbms來(lái)完成。來(lái)完成。n數(shù)據(jù)庫(kù)恢復(fù)的基本原理就是利用數(shù)據(jù)的冗余的。數(shù)據(jù)庫(kù)恢復(fù)的基本原理就是利用數(shù)據(jù)的冗余的。十分簡(jiǎn)單,實(shí)現(xiàn)的方法也比較清楚,但真正實(shí)十分簡(jiǎn)單,實(shí)現(xiàn)的方法也比較清楚,但真正實(shí)現(xiàn)起來(lái)相當(dāng)復(fù)雜,實(shí)現(xiàn)恢復(fù)的程序非常龐大,現(xiàn)起來(lái)相當(dāng)復(fù)雜,實(shí)現(xiàn)恢復(fù)的程序非常龐大,常常占整個(gè)系統(tǒng)代碼的百分之十以上。常常占整個(gè)系統(tǒng)代碼的百分之十以上。n數(shù)據(jù)庫(kù)系統(tǒng)所采用的恢復(fù)技術(shù)是否行之有效,數(shù)據(jù)庫(kù)
44、系統(tǒng)所采用的恢復(fù)技術(shù)是否行之有效,不僅對(duì)系統(tǒng)的可靠程度起著決定性使用,而且不僅對(duì)系統(tǒng)的可靠程度起著決定性使用,而且對(duì)系統(tǒng)的運(yùn)行效率也有很大的影響,是衡量系對(duì)系統(tǒng)的運(yùn)行效率也有很大的影響,是衡量系統(tǒng)性能優(yōu)劣的重要指標(biāo)統(tǒng)性能優(yōu)劣的重要指標(biāo)。10.6 10.6 具有檢查點(diǎn)的恢復(fù)技術(shù)具有檢查點(diǎn)的恢復(fù)技術(shù)一、問(wèn)題的提出二、檢查點(diǎn)技術(shù)檢查點(diǎn)技術(shù)三、利用檢查點(diǎn)的恢復(fù)策略三、利用檢查點(diǎn)的恢復(fù)策略一、問(wèn)題的提出n兩個(gè)問(wèn)題兩個(gè)問(wèn)題n搜索整個(gè)日志將耗費(fèi)大量的時(shí)間搜索整個(gè)日志將耗費(fèi)大量的時(shí)間nredo處理:重新執(zhí)行,浪費(fèi)了大量時(shí)處理:重新執(zhí)行,浪費(fèi)了大量時(shí)間間解決方案n具有檢查點(diǎn)(具有檢查點(diǎn)(checkpoint)的
45、恢復(fù)技術(shù))的恢復(fù)技術(shù)n在日志文件中增加檢查點(diǎn)記錄(在日志文件中增加檢查點(diǎn)記錄(checkpoint)n增加重新開(kāi)始文件增加重新開(kāi)始文件n恢復(fù)子系統(tǒng)在登錄日志文件期間動(dòng)態(tài)地維護(hù)日志恢復(fù)子系統(tǒng)在登錄日志文件期間動(dòng)態(tài)地維護(hù)日志二、檢查點(diǎn)技術(shù)n檢查點(diǎn)記錄的內(nèi)容檢查點(diǎn)記錄的內(nèi)容n1. 建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)清單建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)清單n2. 這些事務(wù)最近一個(gè)日志記錄的地址這些事務(wù)最近一個(gè)日志記錄的地址n重新開(kāi)始文件的內(nèi)容重新開(kāi)始文件的內(nèi)容n記錄各個(gè)檢查點(diǎn)記錄在日志文件中的地址記錄各個(gè)檢查點(diǎn)記錄在日志文件中的地址具有檢查點(diǎn)的日志文件和重新開(kāi)始文件具有檢查點(diǎn)的日志文件和重新開(kāi)始文件 動(dòng)
46、態(tài)維護(hù)日志文件的方法n動(dòng)態(tài)維護(hù)日志文件的方法動(dòng)態(tài)維護(hù)日志文件的方法周期性地執(zhí)行如下操作:建立檢查點(diǎn),保存數(shù)據(jù)庫(kù)狀態(tài)。周期性地執(zhí)行如下操作:建立檢查點(diǎn),保存數(shù)據(jù)庫(kù)狀態(tài)。具體步驟是:具體步驟是:n1.將當(dāng)前日志緩沖區(qū)中的所有日志記錄寫(xiě)入磁盤(pán)的日志文將當(dāng)前日志緩沖區(qū)中的所有日志記錄寫(xiě)入磁盤(pán)的日志文件上件上n2.在日志文件中寫(xiě)入一個(gè)檢查點(diǎn)記錄在日志文件中寫(xiě)入一個(gè)檢查點(diǎn)記錄n3.將當(dāng)前數(shù)據(jù)緩沖區(qū)的所有數(shù)據(jù)記錄寫(xiě)入磁盤(pán)的數(shù)據(jù)庫(kù)中將當(dāng)前數(shù)據(jù)緩沖區(qū)的所有數(shù)據(jù)記錄寫(xiě)入磁盤(pán)的數(shù)據(jù)庫(kù)中n4.把檢查點(diǎn)記錄在日志文件中的地址寫(xiě)入一個(gè)重新開(kāi)始把檢查點(diǎn)記錄在日志文件中的地址寫(xiě)入一個(gè)重新開(kāi)始文文件件建立檢查點(diǎn)n恢復(fù)子系統(tǒng)可以
47、定期或不定期地建立檢查點(diǎn)恢復(fù)子系統(tǒng)可以定期或不定期地建立檢查點(diǎn),保存數(shù)據(jù)庫(kù)狀態(tài)保存數(shù)據(jù)庫(kù)狀態(tài) n定期定期按照預(yù)定的一個(gè)時(shí)間間隔,如每隔一小時(shí)建立一個(gè)檢查點(diǎn)按照預(yù)定的一個(gè)時(shí)間間隔,如每隔一小時(shí)建立一個(gè)檢查點(diǎn) n不定期不定期按照某種規(guī)則,如日志文件已寫(xiě)滿一半建立一個(gè)檢查點(diǎn)按照某種規(guī)則,如日志文件已寫(xiě)滿一半建立一個(gè)檢查點(diǎn)三、利用檢查點(diǎn)的恢復(fù)策略n使用檢查點(diǎn)方法可以改善恢復(fù)效率使用檢查點(diǎn)方法可以改善恢復(fù)效率n當(dāng)事務(wù)當(dāng)事務(wù)t在一個(gè)檢查點(diǎn)之前提交在一個(gè)檢查點(diǎn)之前提交 t對(duì)數(shù)據(jù)庫(kù)所做的修改已寫(xiě)入數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)庫(kù)所做的修改已寫(xiě)入數(shù)據(jù)庫(kù)n寫(xiě)入時(shí)間是在這個(gè)檢查點(diǎn)建立之前或在這寫(xiě)入時(shí)間是在這個(gè)檢查點(diǎn)建立之前或在這個(gè)檢
48、查點(diǎn)建立之時(shí)個(gè)檢查點(diǎn)建立之時(shí) n在進(jìn)行恢復(fù)處理時(shí),沒(méi)有必要對(duì)事務(wù)在進(jìn)行恢復(fù)處理時(shí),沒(méi)有必要對(duì)事務(wù)t執(zhí)行執(zhí)行redo操作操作tc (檢查點(diǎn)檢查點(diǎn))tf(系統(tǒng)故障系統(tǒng)故障) redoundoundo redot2t3t4t5不要不要redot1系統(tǒng)出現(xiàn)故障時(shí),恢復(fù)子系統(tǒng)將根據(jù)事務(wù)的不同狀態(tài)采取不同的恢復(fù)策略系統(tǒng)出現(xiàn)故障時(shí),恢復(fù)子系統(tǒng)將根據(jù)事務(wù)的不同狀態(tài)采取不同的恢復(fù)策略 nt1:在檢查點(diǎn)之前提交:在檢查點(diǎn)之前提交nt2:在檢查點(diǎn)之前開(kāi)始執(zhí)行,在檢查點(diǎn)之后故障點(diǎn)之:在檢查點(diǎn)之前開(kāi)始執(zhí)行,在檢查點(diǎn)之后故障點(diǎn)之前提交前提交nt3:在檢查點(diǎn)之前開(kāi)始執(zhí)行,在故障點(diǎn)時(shí)還未完成:在檢查點(diǎn)之前開(kāi)始執(zhí)行,在故障點(diǎn)時(shí)
49、還未完成nt4:在檢查點(diǎn)之后開(kāi)始執(zhí)行,在故障點(diǎn)之前提交:在檢查點(diǎn)之后開(kāi)始執(zhí)行,在故障點(diǎn)之前提交nt5:在檢查點(diǎn)之后開(kāi)始執(zhí)行,在故障點(diǎn)時(shí)還未完成:在檢查點(diǎn)之后開(kāi)始執(zhí)行,在故障點(diǎn)時(shí)還未完成恢復(fù)策略:恢復(fù)策略:nt3和和t5在故障發(fā)生時(shí)還未完成,所以予以撤銷(xiāo)在故障發(fā)生時(shí)還未完成,所以予以撤銷(xiāo)nt2和和t4在檢查點(diǎn)之后才提交,它們對(duì)數(shù)據(jù)庫(kù)所做的修在檢查點(diǎn)之后才提交,它們對(duì)數(shù)據(jù)庫(kù)所做的修改在故障發(fā)生時(shí)可能還在緩沖區(qū)中,尚未寫(xiě)入數(shù)據(jù)庫(kù),改在故障發(fā)生時(shí)可能還在緩沖區(qū)中,尚未寫(xiě)入數(shù)據(jù)庫(kù),所以要所以要redont1在檢查點(diǎn)之前已提交,所以不必執(zhí)行在檢查點(diǎn)之前已提交,所以不必執(zhí)行redo操作操作10.7 數(shù)據(jù)庫(kù)鏡像數(shù)據(jù)庫(kù)鏡像n介質(zhì)故障是對(duì)系統(tǒng)影響最為嚴(yán)重的一種故障,嚴(yán)重影介質(zhì)故障是對(duì)系統(tǒng)影響最為嚴(yán)重的一種故
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合作聯(lián)營(yíng)合同范文
- 呂金遙借款合同分析
- 房屋交易居間服務(wù)協(xié)議書(shū)
- 2024版旅游合同書(shū)編寫(xiě)
- 工廠轉(zhuǎn)讓合同關(guān)鍵條款
- 浙江省建筑業(yè)農(nóng)民工雇傭合同模板
- 倉(cāng)庫(kù)租賃合同 附加協(xié)議
- 技術(shù)股權(quán)合作格式模板
- 農(nóng)業(yè)合作社貧困戶精準(zhǔn)幫扶協(xié)議
- 醫(yī)生間合作協(xié)議書(shū)參考樣本
- 臨時(shí)用地復(fù)耕方案
- 二年級(jí)上數(shù)學(xué)老師家長(zhǎng)會(huì)ppt.ppt
- 辦理營(yíng)業(yè)執(zhí)照委托書(shū)
- 危險(xiǎn)貨物道路運(yùn)輸安全卡4
- 船舶電氣安裝理論圖紙相結(jié)合PPT課件
- 道路交通標(biāo)志與標(biāo)線PPT課件
- 幕墻打膠工藝
- 新冀教版九年級(jí)英語(yǔ)上冊(cè)第26課課件
- 編寫(xiě)標(biāo)準(zhǔn)必備文件 國(guó)家標(biāo)準(zhǔn) 地方標(biāo)準(zhǔn) 行業(yè)標(biāo)準(zhǔn) 企業(yè)標(biāo)準(zhǔn) 格式模板大全
- 《鉆木取火》PPT
- 2021-2025鄉(xiāng)村5年規(guī)劃三篇
評(píng)論
0/150
提交評(píng)論