【正文】
stem 一、事務(wù)內(nèi)部的故障 ?事務(wù)內(nèi)部的故障 ? 有的是可以通過(guò)事務(wù)程序本身發(fā)現(xiàn)的 (見(jiàn)下面轉(zhuǎn)賬事 務(wù)的例子 ) ? 有的是非預(yù)期的 An Introduction to Database System 事務(wù)內(nèi)部的故障(續(xù)) ? 例如,銀行轉(zhuǎn)賬事務(wù),這個(gè)事務(wù)把一筆金額從一個(gè)賬戶(hù)甲轉(zhuǎn)給另一個(gè)賬戶(hù)乙。金額不足,不能轉(zhuǎn)賬 39。否則就會(huì)使數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),例如只把賬戶(hù)甲的余額減少了而沒(méi)有把賬戶(hù)乙的余額增加。 An Introduction to Database System 事務(wù)內(nèi)部的故障(續(xù)) ?事務(wù)內(nèi)部更多的故障是非預(yù)期的,是不能由應(yīng)用程序處理的。 ? 整個(gè)系統(tǒng)的正常運(yùn)行突然被破壞 ? 所有正在運(yùn)行的事務(wù)都非正常終止 ? 不破壞數(shù)據(jù)庫(kù) ? 內(nèi)存中數(shù)據(jù)庫(kù)緩沖區(qū)的信息全部丟失 An Introduction to Database System 系統(tǒng)故障的常見(jiàn)原因 ?特定類(lèi)型的硬件錯(cuò)誤(如 CPU故障) ?操作系統(tǒng)故障 ?DBMS代碼錯(cuò)誤 ?系統(tǒng)斷電 An Introduction to Database System 系統(tǒng)故障的恢復(fù) ?發(fā)生系統(tǒng)故障時(shí),事務(wù)未提交 ? 恢復(fù)策略:強(qiáng)行撤消( UNDO)所有未完成事務(wù) ?發(fā)生系統(tǒng)故障時(shí),事務(wù)已提交,但緩沖區(qū)中的信息尚未完全寫(xiě)回到磁盤(pán)上。 An Introduction to Database System 第十章 數(shù)據(jù)庫(kù)恢復(fù)技術(shù) 事務(wù)的基本概念 數(shù)據(jù)庫(kù)恢復(fù)概述 故障的種類(lèi) 恢復(fù)的實(shí)現(xiàn)技術(shù) 恢復(fù)策略 具有檢查點(diǎn)的恢復(fù)技術(shù) 數(shù)據(jù)庫(kù)鏡像 小結(jié) An Introduction to Database System 恢復(fù)的實(shí)現(xiàn)技術(shù) ? 恢復(fù)操作的基本原理:冗余 利用存儲(chǔ)在系統(tǒng)其它地方的冗余數(shù)據(jù)來(lái)重建數(shù)據(jù)庫(kù)中已被破壞或不正確的那部分?jǐn)?shù)據(jù) ? 恢復(fù)機(jī)制涉及的關(guān)鍵問(wèn)題 1. 如何建立冗余數(shù)據(jù) ? 數(shù)據(jù)轉(zhuǎn)儲(chǔ)( backup) ? 登錄日志文件( logging) 2. 如何利用這些冗余數(shù)據(jù)實(shí)施數(shù)據(jù)庫(kù)恢復(fù) An Introduction to Database System 數(shù)據(jù)轉(zhuǎn)儲(chǔ) 一、什么是數(shù)據(jù)轉(zhuǎn)儲(chǔ) 二、轉(zhuǎn)儲(chǔ)方法 An Introduction to Database System 一、什么是數(shù)據(jù)轉(zhuǎn)儲(chǔ) ?轉(zhuǎn)儲(chǔ)是指 DBA將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到磁帶或另一個(gè)磁盤(pán)上保存起來(lái)的過(guò)程,備用的數(shù)據(jù)稱(chēng)為后備副本或后援副本 ?如何使用 ? 數(shù)據(jù)庫(kù)遭到破壞后可以將后備副本重新裝入 ? 重裝后備副本只能將數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài) An Introduction to Database System 轉(zhuǎn)儲(chǔ) 故障發(fā)生點(diǎn) 轉(zhuǎn)儲(chǔ) 運(yùn)行事務(wù) ↓ 正常運(yùn)行 ─┼───────┼───────────── Ta Tb Tf 重裝后備副本 重新運(yùn)行事務(wù) 恢復(fù) ─┼───────┴ ----------- - → An Introduction to Database System 二、轉(zhuǎn)儲(chǔ)方法 1.靜態(tài)轉(zhuǎn)儲(chǔ)與動(dòng)態(tài)轉(zhuǎn)儲(chǔ) 2.海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ) 3.轉(zhuǎn)儲(chǔ)方法小結(jié) An Introduction to Database System 靜態(tài)轉(zhuǎn)儲(chǔ) ?在系統(tǒng)中無(wú)運(yùn)行事務(wù)時(shí)進(jìn)行的轉(zhuǎn)儲(chǔ)操作 ?轉(zhuǎn)儲(chǔ)開(kāi)始時(shí)數(shù)據(jù)庫(kù)處于一致性狀態(tài) ?轉(zhuǎn)儲(chǔ)期間不允許對(duì)數(shù)據(jù)庫(kù)的任何存取、修改活動(dòng) ?得到的一定是一個(gè)數(shù)據(jù)一致性的副本 ?優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單 ?缺點(diǎn):降低了數(shù)據(jù)庫(kù)的可用性 ? 轉(zhuǎn)儲(chǔ)必須等待正運(yùn)行的用戶(hù)事務(wù)結(jié)束 ? 新的事務(wù)必須等轉(zhuǎn)儲(chǔ)結(jié)束 An Introduction to Database System 利用靜態(tài)轉(zhuǎn)儲(chǔ)副本進(jìn)行恢復(fù) 故障發(fā)生點(diǎn) 靜態(tài) 轉(zhuǎn)儲(chǔ) 運(yùn)行事務(wù) ↓ 正常運(yùn)行 ─┼───────┼───────────── Ta Tb Tf 重裝后備副本 恢復(fù) ─┼─────── ┥ An Introduction to Database System 動(dòng)態(tài)轉(zhuǎn)儲(chǔ) ?轉(zhuǎn)儲(chǔ)操作與用戶(hù)事務(wù)并發(fā)進(jìn)行 ?轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取或修改 ?優(yōu)點(diǎn) ? 不用等待正在運(yùn)行的用戶(hù)事務(wù)結(jié)束 ? 不會(huì)影響新事務(wù)的運(yùn)行 ?動(dòng)態(tài)轉(zhuǎn)儲(chǔ)的缺點(diǎn) ? 不能保證副本中的數(shù)據(jù)正確有效 [例 ]在轉(zhuǎn)儲(chǔ)期間的某個(gè)時(shí)刻 Tc,系統(tǒng)把數(shù)據(jù) A=100轉(zhuǎn)儲(chǔ)到磁帶上,而在下一時(shí)刻 Td,某一事務(wù)將 A改為 200。 ?但轉(zhuǎn)儲(chǔ)又是十分耗費(fèi)時(shí)間和資源的,不能頻繁進(jìn)行。 例: ? 每天晚上進(jìn)行動(dòng)態(tài)增量轉(zhuǎn)儲(chǔ) ? 每周進(jìn)行一次動(dòng)態(tài)海量轉(zhuǎn)儲(chǔ) ? 每月進(jìn)行一次靜態(tài)海量轉(zhuǎn)儲(chǔ) An Introduction to Database System 恢復(fù)的實(shí)現(xiàn)技術(shù) 數(shù)據(jù)轉(zhuǎn)儲(chǔ) 登記日志文件 An Introduction to Database System 登記日志文件 一、日志文件的格式和內(nèi)容 二、日志文件的作用 三、登記日志文件 An Introduction to Database System 一、日志文件的格式和內(nèi)容 ?什么是日志文件 日志文件 (log)是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文 件 ?日志文件的格式 ? 以記錄為單位的日志文件 ? 以數(shù)據(jù)塊為單位的日志文件 An Introduction to Database System 日志文件的格式和內(nèi)容(續(xù)) ?以記錄為單位的日志文件內(nèi)容 ? 各個(gè)事務(wù)的開(kāi)始標(biāo)記 (BEGIN TRANSACTION) ? 各個(gè)事務(wù)的結(jié)束標(biāo)記 (COMMIT或 ROLLBACK) ? 各個(gè)事務(wù)的所有更新操作 以上均作為日志文件中的一個(gè)日志記錄 (log record) An Introduction to Database System 日志文件的格式和內(nèi)容(續(xù)) ?以記錄為單位的日志文件,每條日志記錄的內(nèi)容 ? 事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù)) ? 操作類(lèi)型(插入、刪除或修改) ? 操作對(duì)象(記錄內(nèi)部標(biāo)識(shí)) ? 更新前數(shù)據(jù)的舊值(對(duì)插入操作而言,此項(xiàng)為空值) ? 更新后數(shù)據(jù)的新值(對(duì)刪除操作而言 , 此項(xiàng)為空值) An Introduction to Database System 日志文件的格式和內(nèi)容(續(xù)) ?以數(shù)據(jù)塊為單位的日志文件,每條日志記錄的內(nèi)容 ? 事務(wù)標(biāo)識(shí)(標(biāo)明是那個(gè)事務(wù)) ? 被更新的數(shù)據(jù)塊 An Introduction to Database System