事務(wù)處理技術(shù)課件_第1頁
事務(wù)處理技術(shù)課件_第2頁
事務(wù)處理技術(shù)課件_第3頁
事務(wù)處理技術(shù)課件_第4頁
事務(wù)處理技術(shù)課件_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第七章事務(wù)處理技術(shù)第七章事務(wù)處理技術(shù)1數(shù)據(jù)庫恢復(fù)技術(shù)事務(wù)-用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么都做要么都不做,是不可分割的。事務(wù)是DBMS中的基本執(zhí)行單位;事務(wù)是恢復(fù)和并發(fā)控制的基本單位數(shù)據(jù)庫恢復(fù)技術(shù)事務(wù)-用戶定義的一個數(shù)據(jù)庫操作序列,這些操作2如何定義事務(wù)顯式定義方式

BEGINTRANSACTION

BEGINTRANSACTIONSQL語句1SQL語句1SQL語句2SQL語句2…… ……

COMMIT

ROLLBACK隱式方式當(dāng)用戶沒有顯式地定義事務(wù)時,DBMS按缺省規(guī)定自動劃分事務(wù)如何定義事務(wù)顯式定義方式3COMMIT事務(wù)正常結(jié)束提交事務(wù)的所有操作(讀+更新)事務(wù)中所有對數(shù)據(jù)庫的更新永久生效ROLLBACK事務(wù)異常終止事務(wù)運行的過程中發(fā)生了故障,不能繼續(xù)執(zhí)行回滾事務(wù)的所有更新操作事務(wù)滾回到開始時的狀態(tài)COMMIT4事務(wù)的特性ACID特性A(原子性)-不可分割的邏輯工作單位。C(一致性)-事務(wù)要保證數(shù)據(jù)庫從一個一致性狀態(tài)到另一個一致性狀態(tài)。I(隔離性)-事務(wù)內(nèi)部的操作對其他事務(wù)是隔離的。D(持久性)-事務(wù)COMMIT后,對數(shù)據(jù)庫的改變的持久性。事務(wù)的特性ACID特性51.原子性事務(wù)是數(shù)據(jù)庫的邏輯工作單位事務(wù)中包括的諸操作要么都做,要么都不做1.原子性事務(wù)是數(shù)據(jù)庫的邏輯工作單位62.一致性事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。一致性狀態(tài): 數(shù)據(jù)庫中只包含成功事務(wù)提交的結(jié)果不一致狀態(tài): 數(shù)據(jù)庫中包含失敗事務(wù)的結(jié)果2.一致性事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到7一致性與原子性銀行轉(zhuǎn)帳:從帳號A中取出一萬元,存入帳號B。定義一個事務(wù),該事務(wù)包括兩個操作這兩個操作要么全做,要么全不做全做或者全不做,數(shù)據(jù)庫都處于一致性狀態(tài)。如果只做一個操作,數(shù)據(jù)庫就處于不一致性狀態(tài)。

B=B+1

A=A-1BA一致性與原子性銀行轉(zhuǎn)帳:從帳號A中取出一萬元,存入帳號B。

83.隔離性對并發(fā)執(zhí)行而言一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對其他并發(fā)事務(wù)是隔離的并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾3.隔離性對并發(fā)執(zhí)行而言9T1的修改被T2覆蓋了!

讀A=16

A←A-3寫回A=13①讀A=16

③A←A-1寫回A=15

④T2T1T1的修改被T2覆蓋了!

①讀A=16T2T1104.持續(xù)性持續(xù)性也稱永久性(Permanence)一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其他操作或故障不應(yīng)該對其執(zhí)行結(jié)果有任何影響。4.持續(xù)性持續(xù)性也稱永久性(Permanence)11事務(wù)的特性保證事務(wù)ACID特性是事務(wù)處理的任務(wù)破壞事務(wù)ACID特性的因素多個事務(wù)并行運行時,不同事務(wù)的操作交叉執(zhí)行事務(wù)在運行過程中被強行停止事務(wù)的特性保證事務(wù)ACID特性是事務(wù)處理的任務(wù)12在任何情況下,DBMS都應(yīng)保證事務(wù)的ACID性質(zhì)。正常運行時和發(fā)生故障時,都應(yīng)保證事務(wù)的ACID性質(zhì)。不但在單個應(yīng)用運行時應(yīng)保證事務(wù)的ACID性質(zhì);而且在多個應(yīng)用并行運行時,也應(yīng)保證事務(wù)的ACID性質(zhì)。保證事務(wù)在故障發(fā)生時滿足ACID性質(zhì)的措施稱為恢復(fù)技術(shù)。保證多個事務(wù)在并行執(zhí)行時滿足ACID性質(zhì)的措施稱為并發(fā)控制技術(shù)?;謴?fù)和并發(fā)控制是保證事務(wù)正確運行的兩項基本技術(shù),它們被合稱為事務(wù)管理。在任何情況下,DBMS都應(yīng)保證事務(wù)的ACID性質(zhì)。正常運行13恢復(fù)技術(shù)概述故障是不可避免的計算機硬件故障系統(tǒng)軟件和應(yīng)用軟件的錯誤操作員的失誤惡意的破壞故障的影響運行事務(wù)非正常中斷破壞數(shù)據(jù)庫恢復(fù)技術(shù)概述故障是不可避免的14數(shù)據(jù)庫管理系統(tǒng)對故障的對策DBMS提供恢復(fù)子系統(tǒng)保證故障發(fā)生后,能把數(shù)據(jù)庫中的數(shù)據(jù)從錯誤狀態(tài)恢復(fù)到某種邏輯一致的狀態(tài)保證事務(wù)ACID恢復(fù)技術(shù)是衡量系統(tǒng)優(yōu)劣的重要指標(biāo)數(shù)據(jù)庫管理系統(tǒng)對故障的對策15故障的種類1、事務(wù)內(nèi)部故障事務(wù)內(nèi)部的故障有的是可以通過事務(wù)程序本身發(fā)現(xiàn)的(見下面轉(zhuǎn)帳事務(wù)的例子),有的是非預(yù)期的,不能由事務(wù)程序處理的。例如:銀行轉(zhuǎn)帳事務(wù),這個事務(wù)把一筆金額從一個帳戶甲轉(zhuǎn)給另一個帳戶乙。故障的種類1、事務(wù)內(nèi)部故障16BEGINTRANSACTION讀帳戶甲的余額BALANCE;BALANCE=BALANCE-AMOUNT;AMOUNT為轉(zhuǎn)帳金額)IF(BALANCE〈0)THEN{打印′金額不足,不能轉(zhuǎn)帳′;ROLLBACK;(撤消剛才的修改,恢復(fù)事務(wù))}ELSE{讀帳戶乙的余額BALANCE1;

BALANCE1=BALANCE1+AMOUNT;

寫回BALANCE1;

COMMIT;}BEGINTRANSACTION17上面這個例子所包括的兩個更新操作要么全部完成要么全部不做。否則就會使數(shù)據(jù)庫處于不一致狀態(tài),例如只把帳戶甲的余額減少了而沒有把帳戶乙的余額增加。在這段程序中若產(chǎn)生帳戶甲余額不足的情況,應(yīng)用程序可以發(fā)現(xiàn)并讓事務(wù)滾回,撤消已作的修改,恢復(fù)數(shù)據(jù)庫到正確狀態(tài)。事務(wù)內(nèi)部更多的故障是非預(yù)期的,是不能由應(yīng)用程序處理的。如運算溢出、并發(fā)事務(wù)發(fā)生死鎖而被選中撤消該事務(wù)、違反了某些完整性限制等。以后,事務(wù)故障僅指這類非預(yù)期的故障。上面這個例子所包括的兩個更新操作要么全部完成要么18事務(wù)故障的常見原因輸入數(shù)據(jù)有誤運算溢出違反了某些完整性限制某些應(yīng)用程序出錯并行事務(wù)發(fā)生死鎖……事務(wù)故障的常見原因19發(fā)生事務(wù)故障時,夭折的事務(wù)可能已把對數(shù)據(jù)庫的部分修改寫回磁盤事務(wù)故障的恢復(fù):撤消事務(wù)(UNDO)強行回滾(ROLLBACK)該事務(wù)清除該事務(wù)對數(shù)據(jù)庫的所有修改,使得這個事務(wù)象根本沒有啟動過一樣發(fā)生事務(wù)故障時,夭折的事務(wù)可能已把對數(shù)據(jù)庫的部分修改寫回磁盤202.系統(tǒng)故障什么是系統(tǒng)故障整個系統(tǒng)的正常運行突然被破壞所有正在運行的事務(wù)都非正常終止內(nèi)存中數(shù)據(jù)庫緩沖區(qū)的信息全部丟失外部存儲設(shè)備上的數(shù)據(jù)未受影響2.系統(tǒng)故障21系統(tǒng)故障的常見原因操作系統(tǒng)或DBMS代碼錯誤操作員操作失誤特定類型的硬件錯誤(如CPU故障)突然停電系統(tǒng)故障的常見原因操作系統(tǒng)或DBMS代碼錯誤22系統(tǒng)故障的恢復(fù)清除尚未完成的事務(wù)對數(shù)據(jù)庫的所有修改系統(tǒng)重新啟動時,恢復(fù)程序要強行撤消(UNDO)所有未完成事務(wù)將緩沖區(qū)中已完成事務(wù)提交的結(jié)果寫入數(shù)據(jù)庫系統(tǒng)重新啟動時,恢復(fù)程序需要重做(REDO)所有已提交的事務(wù)系統(tǒng)故障的恢復(fù)清除尚未完成的事務(wù)對數(shù)據(jù)庫的所有修改23發(fā)生系統(tǒng)故障時,一些尚未完成的事務(wù)的結(jié)果可能已送入物理數(shù)據(jù)庫,有些已完成的事務(wù)可能有一部分甚至全部留在緩沖區(qū),尚未寫回到磁盤上的物理數(shù)據(jù)庫中,從而造成數(shù)據(jù)庫可能處于不正確的狀態(tài)。為保證數(shù)據(jù)一致性,恢復(fù)子系統(tǒng)必須在系統(tǒng)重新啟動時讓所有非正常終止的事務(wù)回滾,強行撤消(UNDO)所有未完成事務(wù)。重做(Redo)所有已提交的事務(wù),以將數(shù)據(jù)庫真正恢復(fù)到一致狀態(tài)。發(fā)生系統(tǒng)故障時,一些尚未完成的事務(wù)的結(jié)果可能已送243、介質(zhì)故障系統(tǒng)故障常稱為軟故障(SoftCrash),介質(zhì)故障稱為硬故障(HardCrash)。硬故障指外存故障,如磁盤損壞、磁頭碰撞,瞬時強磁場干擾等。這類故障將破壞數(shù)據(jù)庫或部分?jǐn)?shù)據(jù)庫,并影響正在存取這部分?jǐn)?shù)據(jù)的所有事務(wù)。這類故障比前兩類故障發(fā)生的可能性小得多,但破壞性最大。3、介質(zhì)故障254、計算機病毒計算機病毒是具有破壞性、可以自我復(fù)制的計算機程序。計算機病毒已成為計算機系統(tǒng)的主要威脅,自然也是數(shù)據(jù)庫系統(tǒng)的主要威脅。因此數(shù)據(jù)庫一旦被破壞仍要用恢復(fù)技術(shù)把數(shù)據(jù)庫加以恢復(fù)。總結(jié)各類故障,對數(shù)據(jù)庫的影響有兩種可能性。一是數(shù)據(jù)庫本身被破壞。二是數(shù)據(jù)庫沒有破壞,但數(shù)據(jù)可能不正確,這是因為事務(wù)的運行被非正常終止造成的。4、計算機病毒26恢復(fù)的實現(xiàn)技術(shù)1、概述恢復(fù)機制涉及的兩個關(guān)鍵問題是:第一,如何建立冗余數(shù)據(jù);第二,如何利用這些冗余數(shù)據(jù)實施數(shù)據(jù)庫恢復(fù)。建立冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)備份和登記日志文件。通常在一個數(shù)據(jù)庫系統(tǒng)中,這兩種方法是一起使用的。恢復(fù)的實現(xiàn)技術(shù)1、概述27恢復(fù)技術(shù)大致有下列三種:1.單純以后備復(fù)本為基礎(chǔ)的恢復(fù)技術(shù);1)周期性的數(shù)據(jù)庫轉(zhuǎn)儲;2)增量轉(zhuǎn)儲。優(yōu)點:實現(xiàn)簡單,不增加數(shù)據(jù)庫正常運行時的開銷。缺點:不能恢復(fù)到數(shù)據(jù)庫的最近一致狀態(tài)。(只能用在小型和不重要的數(shù)據(jù)庫系統(tǒng))恢復(fù)技術(shù)大致有下列三種:282.以后備復(fù)本和運行記錄(Log或Journal)為基礎(chǔ)的恢復(fù)技術(shù);下面將詳細(xì)介紹這種技術(shù)。優(yōu)點:數(shù)據(jù)庫恢復(fù)到最近的一致狀態(tài)。缺點:實現(xiàn)復(fù)雜,運行時需保留運行記錄。----大部分商品化DBMS支持這種恢復(fù)技術(shù),這是主要的恢復(fù)方法。2.以后備復(fù)本和運行記錄(Log或Journal)為基礎(chǔ)293.基于多復(fù)本的恢復(fù)技術(shù)鏡像磁盤系統(tǒng)優(yōu)點:多復(fù)本互為備份,具有獨立的失效模式。缺點:增加費用。3.基于多復(fù)本的恢復(fù)技術(shù)302、數(shù)據(jù)庫備份所謂備份即DBA定期地將整個數(shù)據(jù)庫復(fù)制到磁帶或另一個磁盤上保存起來的過程。這些備用的數(shù)據(jù)文本稱為后備副本或后援副本。當(dāng)數(shù)據(jù)庫遭到破壞后可以將后備副本重新裝入,但重裝后備副本只能將數(shù)據(jù)庫恢復(fù)到備份時的狀態(tài),要想恢復(fù)到故障發(fā)生時的狀態(tài),必須重新運行自備份以后的所有更新事務(wù)。2、數(shù)據(jù)庫備份31例、在下圖中,系統(tǒng)在Ta時刻停止運行事務(wù)進行數(shù)據(jù)庫備份,在Tb時刻備份完畢,得到Tb時刻的數(shù)據(jù)庫一致性副本例、在下圖中,系統(tǒng)在Ta時刻停止運行事務(wù)進行數(shù)據(jù)庫備32系統(tǒng)運行到Tf時刻發(fā)生故障。為恢復(fù)數(shù)據(jù)庫,首先由DBA重裝數(shù)據(jù)庫后備副本,將數(shù)據(jù)庫恢復(fù)至Tb時刻的狀態(tài),然后重新運行自Tb時刻至Tf時刻的所有更新事務(wù),這樣就把數(shù)據(jù)庫恢復(fù)到故障發(fā)生前的一致狀態(tài)。系統(tǒng)運行到Tf時刻發(fā)生故障。為恢復(fù)數(shù)據(jù)庫,首先由DBA33備份是十分耗費時間和資源的,不能頻繁進行。DBA應(yīng)該根據(jù)數(shù)據(jù)庫的使用情況確定一個適當(dāng)?shù)膫浞葜芷?。備份可分為脫機備份和聯(lián)機備份兩種方式。脫機備份是在備份過程中數(shù)據(jù)庫系統(tǒng)處于脫機狀態(tài),即在備份過程中數(shù)據(jù)庫系統(tǒng)不再接受應(yīng)用程序的訪問,因此,脫機備份又稱為靜態(tài)備份。聯(lián)機備份是在備份過程中數(shù)據(jù)庫系統(tǒng)處于聯(lián)機狀態(tài),即在進行備份的同時數(shù)據(jù)庫系統(tǒng)還可接受應(yīng)用程序的訪問。因此,聯(lián)機備份又稱為動態(tài)備份。備份是十分耗費時間和資源的,不能頻繁進行。DBA應(yīng)該34備份還可以分為海量備份和增量備份兩種方式。海量備份是指每次備份全部數(shù)據(jù)庫。增量備份則指每次只備份上一次備份后更新過的數(shù)據(jù)。從恢復(fù)角度看,使用海量備份得到的后備副本進行恢復(fù)一般說來會更方便些。但如果數(shù)據(jù)庫很大,事務(wù)處理又十分頻繁,則增量備份方式更實用更有效。備份還可以分為海量備份和增量備份兩種方式。353、數(shù)據(jù)庫日志日志文件的格式和內(nèi)容日志文件是用來記錄事務(wù)對數(shù)據(jù)庫的更新操作的文件。不同數(shù)據(jù)庫系統(tǒng)采用的日志文件格式并不完全一樣。概括起來日志文件主要有兩種格式:以記錄為單位的日志文件和以數(shù)據(jù)塊為單位的日志文件3、數(shù)據(jù)庫日志36對于以記錄為單位的日志文件,日志文件中需要登記的內(nèi)容包括:各個事務(wù)的開始(BEGINTRANSACTION)標(biāo)記各個事務(wù)的結(jié)束(COMMIT或ROLLBACK)標(biāo)記各個事務(wù)的所有更新操作這里每個事務(wù)開始的標(biāo)記、每個事務(wù)的結(jié)束標(biāo)記和每個更新操作均作為日志文件中的一個日志記錄(logrecord)。對于以記錄為單位的日志文件,日志文件中需要登記的37每個日志記錄的內(nèi)容主要包括:事務(wù)標(biāo)識TID(標(biāo)明是那個事務(wù))操作的類型(插入、刪除或修改)操作對象(記錄內(nèi)部標(biāo)識)更新前數(shù)據(jù)的舊值(對插入操作而言,此項為空值)更新后數(shù)據(jù)的新值(對刪除操作而言,此項為空值)每個日志記錄的內(nèi)容主要包括:38日志文件的作用日志文件在數(shù)據(jù)庫恢復(fù)中起著非常重要的作用??梢杂脕磉M行事務(wù)故障恢復(fù)和系統(tǒng)故障恢復(fù),并協(xié)助后備副本進行介質(zhì)故障恢復(fù)。具體地講:事務(wù)故障恢復(fù)和系統(tǒng)故障必須用日志文件。在動態(tài)備份方式中必須建立日志文件,后援副本和日志文件綜合起來才能有效地恢復(fù)數(shù)據(jù)庫。日志文件的作用39在靜態(tài)備份方式中,也可以建立日志文件。當(dāng)數(shù)據(jù)庫毀壞后可重新裝入后援副本把數(shù)據(jù)庫恢復(fù)到備份結(jié)束時刻的正確狀態(tài),然后利用日志文件,把已完成的事務(wù)進行重做處理,對故障發(fā)生時尚未完成的事務(wù)進行撤消處理。這樣不必重新運行那些已完成的事務(wù)程序就可把數(shù)據(jù)庫恢復(fù)到故障前某一時刻的正確狀態(tài)。在靜態(tài)備份方式中,也可以建立日志文件。40事務(wù)處理技術(shù)ppt課件41登記日志文件(logging)為保證數(shù)據(jù)庫是可恢復(fù)的,登記日志文件時必須遵循兩條原則:1.登記的次序嚴(yán)格按并發(fā)事務(wù)執(zhí)行的時間次序。2.必須先寫日志文件,后寫數(shù)據(jù)庫。登記日志文件(logging)42把對數(shù)據(jù)的修改寫到數(shù)據(jù)庫中和把寫表示這個修改的日志記錄寫到日志文件中是兩個不同的操作。有可能在這兩個操作之間發(fā)生故障,即這兩個寫操作只完成了一個。如果先寫了數(shù)據(jù)庫修改,而在運行記錄中沒有登記下這個修改,則以后就無法恢復(fù)這個修改了。把對數(shù)據(jù)的修改寫到數(shù)據(jù)庫中和把寫表示這個修改的日志43如果先寫日志,但沒有修改數(shù)據(jù)庫,按日志文件恢復(fù)時只不過是多執(zhí)行一次不必要的UNDO操作,并不會影響數(shù)據(jù)庫的正確性。所以為了安全,一定要先寫日志文件,即首先把日志記錄寫到日志文件中,然后寫數(shù)據(jù)庫的修改。這就是所謂的“提前寫日志”原則。如果先寫日志,但沒有修改數(shù)據(jù)庫,按日志文件恢復(fù)時只不過是44事務(wù)故障的恢復(fù)事務(wù)故障是指事務(wù)在運行至正常終止點前被中止,這時恢復(fù)子系統(tǒng)應(yīng)利用日志文件撤消(UNDO)此事務(wù)已對數(shù)據(jù)庫進行的修改。事務(wù)故障的恢復(fù)45事務(wù)故障的恢復(fù)是由系統(tǒng)自動完成的,對用戶是透明的。系統(tǒng)的恢復(fù)步驟是:1)反向掃描文件日志(即從最后向前掃描日志文件),查找該事務(wù)的更新操作。2)對該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫。這樣,如果記錄中是插入操作,則相當(dāng)于做刪除操作(因此時“更新前的值”為空)。若記錄中是刪除操作,則做插入操作,若是修改操作,則相當(dāng)于用修改前值代替修改后值。事務(wù)故障的恢復(fù)是由系統(tǒng)自動完成的,對用戶是透明的。463)繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并做同樣處理。4)如此處理下去,直至讀到此事務(wù)的開始標(biāo)記,事務(wù)故障恢復(fù)就完成了。3)繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,47系統(tǒng)故障的恢復(fù)前面已講過,系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因有兩個,一是未完成事務(wù)對數(shù)據(jù)庫的更新可能已寫入數(shù)據(jù)庫,二是已提交事務(wù)對數(shù)據(jù)庫的更新可能還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫。因此恢復(fù)操作就是要撤消故障發(fā)生時未完成的事務(wù),重做已完成的事務(wù)。系統(tǒng)故障的恢復(fù)是由系統(tǒng)在重新啟動時自動完成的,不需要用戶干預(yù)。系統(tǒng)故障的恢復(fù)48系統(tǒng)的恢復(fù)步驟是:1)正向掃描日志文件(即從頭掃描日志文件),找出在故障發(fā)生前已經(jīng)提交事務(wù)(既有BEGINTRANSACTION記錄,也有COMMIT記錄),將其事務(wù)標(biāo)識記入重做(REDO)隊列。同時找出故障發(fā)生時尚未完成的事務(wù)(只有BEGINTRAN記錄,無相應(yīng)的COMMIT記錄),將其事務(wù)標(biāo)識記入撤消

(UNDO)隊列。2)對撤消隊列中的各個事務(wù)進行撤消(UNDO)處理。3)對重做隊列中的各個事務(wù)進行重做(REDO)處理。系統(tǒng)的恢復(fù)步驟是:49注:進行UNDO處理的方法是,反向掃描日志文件,對每個UNDO事務(wù)的更新操作執(zhí)行逆操作,即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫。注:進行REDO處理的方法是:正向掃描日志文件,對每個REDO事務(wù)重新執(zhí)行日志文件登記的操作。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫。注:進行UNDO處理的方法是,反向掃描日志文件,對每個50介質(zhì)故障的恢復(fù)發(fā)生介質(zhì)故障后,磁盤上的物理數(shù)據(jù)和日志文件被破壞,這是最嚴(yán)重的一種故障,恢復(fù)方法是重裝數(shù)據(jù)庫,然后重做已完成的事務(wù)。具體步驟是:1)裝入最新的數(shù)據(jù)庫后備副本(離故障發(fā)生時刻最近的備份副本),使數(shù)據(jù)庫恢復(fù)到最近一次備份時的一致性狀態(tài)。介質(zhì)故障的恢復(fù)512)裝入相應(yīng)的日志文件副本(備份結(jié)束時刻的日志文件副本),重做已完成的事務(wù)。即:首先掃描日志文件,找出故障發(fā)生時已提交的事務(wù)的標(biāo)識,將其記入重做(REDO)隊列。然后正向掃描日志文件,對重做隊列中的所有事務(wù)進行重做處理。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫。這樣就可以將數(shù)據(jù)庫恢復(fù)至故障前某一時刻的一致狀態(tài)了。2)裝入相應(yīng)的日志文件副本(備份結(jié)束時刻的日志文件52介質(zhì)故障的恢復(fù)需要DBA的介入。但DBA只需要重裝最近備份的數(shù)據(jù)庫副本和有關(guān)的各日志文件副本,然后執(zhí)行系統(tǒng)提供的恢復(fù)命令即可,具體的恢復(fù)操作仍由DBMS完成。介質(zhì)故障的恢復(fù)需要DBA的介入。但DBA只需要重裝最近53利用日志恢復(fù)技術(shù)的問題:搜索整個日志要耗費大量的時間很多需要REDO處理的事務(wù)實際上已經(jīng)將它們的更新寫入數(shù)據(jù)庫了具有檢查點的恢復(fù)技術(shù)利用日志恢復(fù)技術(shù)的問題:具有檢查點的恢復(fù)技術(shù)54具有檢查點(checkpoint)的恢復(fù)技術(shù)在日志文件中增加檢查點記錄(checkpoint)增加重新開始文件恢復(fù)子系統(tǒng)在登錄日志文件期間動態(tài)地維護日志具有檢查點(checkpoint)的恢復(fù)技術(shù)55檢查點記錄的內(nèi)容1.建立檢查點時刻所有正在執(zhí)行的事務(wù)清單2.這些事務(wù)最近一個日志記錄的地址重新開始文件的內(nèi)容記錄各個檢查點記錄在日志文件中的地址檢查點記錄的內(nèi)容56事務(wù)處理技術(shù)ppt課件57動態(tài)維護日志文件的方法1.將當(dāng)前日志緩沖區(qū)中的所有日志記錄寫入磁盤的日志文件上。2.在日志文件中寫入一個檢查點記錄。3.將當(dāng)前數(shù)據(jù)緩沖區(qū)的所有數(shù)據(jù)記錄寫入磁盤的數(shù)據(jù)庫中。4.把檢查點記錄在日志文件中的地址寫入一個重新開始文件。動態(tài)維護日志文件的方法1.將當(dāng)前日志緩沖區(qū)中的所有日志記錄寫58建立檢查點定期按照預(yù)定的一個時間間隔不定期按照某種規(guī)則,如日志文件已寫滿一半建立一個檢查點建立檢查點定期59利用檢查點的恢復(fù)策略當(dāng)事務(wù)T在一個檢查點之前提交——T對數(shù)據(jù)庫所做的修改已寫入數(shù)據(jù)庫在進行恢復(fù)處理時,沒有必要對事務(wù)T執(zhí)行REDO操作利用檢查點的恢復(fù)策略當(dāng)事務(wù)T在一個檢查點之前提交60Tc(檢查點)Tf(系統(tǒng)故障)

REDOUNDOUNDO

REDOT2T3T4T5不要REDOT1Tc(檢查點)Tf(系統(tǒng)故障)REDOUNDOUNDO61利用檢查點的恢復(fù)步驟1.從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄利用檢查點的恢復(fù)步驟622.由該檢查點記錄得到檢查點建立時刻所有正在執(zhí)行的事務(wù)清單ACTIVE-LIST建立兩個事務(wù)隊列UNDO-LISTREDO-LIST把ACTIVE-LIST暫時放入UNDO-LIST隊列,REDO隊列暫為空。2.由該檢查點記錄得到檢查點建立時刻所有正在執(zhí)行的事務(wù)清單A633.從檢查點開始正向掃描日志文件,直到日志文件結(jié)束如有新開始的事務(wù)Ti,把Ti暫時放入UNDO-LIST隊列如有提交的事務(wù)Tj,把Tj從UNDO-LIST隊列移到REDO-LIST隊列4.對UNDO-LIST中的每個事務(wù)執(zhí)行UNDO操作,對REDO-LIST中的每個事務(wù)執(zhí)行REDO操作3.從檢查點開始正向掃描日志文件,直到日志文件結(jié)束64并發(fā)控制技術(shù)引言數(shù)據(jù)庫是一種共享資源,可以供多個用戶使用。允許多個用戶同時使用的數(shù)據(jù)庫系統(tǒng)稱為多用戶數(shù)據(jù)庫系統(tǒng)。當(dāng)多個用戶并發(fā)地存取數(shù)據(jù)庫時就會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況。并發(fā)控制技術(shù)引言65若對并發(fā)操作不加控制就可能會存取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。所以數(shù)據(jù)庫管理系統(tǒng)必須提供并發(fā)控制機制。并發(fā)控制機制是衡量一個數(shù)據(jù)庫管理系統(tǒng)性能的重要標(biāo)志之一。若對并發(fā)操作不加控制就可能會存取和存儲不正確的數(shù)66例1:丟失修改T1T2寫-寫沖突1)讀A=16(機票預(yù)訂典型例子)2)讀A=163)A

A-1寫回A=154)A

A-1寫回A=15例1:丟失修改T1T267例2:不可重復(fù)讀T1T21)讀A=50讀—寫沖突讀B=100求和=1502)讀B=100BB*2寫回B3)讀A=50讀B=200求和=250(驗算不對)例2:不可重復(fù)讀T1T268例3:讀‘臟’數(shù)據(jù)T1T21)讀C=100讀—寫沖突C

C*2寫回C2)讀C=2003)RollbackC恢復(fù)為100例3:讀‘臟’數(shù)據(jù)T169數(shù)據(jù)庫系統(tǒng)中的并發(fā)從上面例子看,數(shù)據(jù)庫管理系統(tǒng)必須提供并發(fā)控制機制。如果數(shù)據(jù)庫中的事務(wù)順序執(zhí)行,即一個事務(wù)完全結(jié)束后,另一個事務(wù)才開始,則稱這種執(zhí)行方式為串行訪問。如果DBMS可以同時接受多個事務(wù),事務(wù)在時間上重疊執(zhí)行,則稱這種執(zhí)行方式為并發(fā)訪問。數(shù)據(jù)庫系統(tǒng)中的并發(fā)70事務(wù)并發(fā)執(zhí)行可能引起的問題丟失修改(lostupdate)兩個事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2提交的結(jié)果破壞了T1提交的結(jié)果,導(dǎo)致T1的修改被丟失。不可重復(fù)讀(non-repeatableread)不可重復(fù)讀是指事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2執(zhí)行更新操作,使T1無法再現(xiàn)前一次讀取結(jié)果。事務(wù)并發(fā)執(zhí)行可能引起的問題71讀“臟”數(shù)據(jù)(dirtyread)讀“臟”數(shù)據(jù)是指事務(wù)T1修改某一數(shù)據(jù),并將其寫回磁盤,事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤消,這時T1已修改過的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)就與

數(shù)據(jù)庫中的數(shù)據(jù)不一致,則T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)。讀“臟”數(shù)據(jù)(dirtyread)72并發(fā)控制的目標(biāo)產(chǎn)生上述三類數(shù)據(jù)不一致性的主要原因是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,使一個用戶事務(wù)的執(zhí)行不受其它事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性。此外,并發(fā)控制還應(yīng)能提高系統(tǒng)資源利用率并改善短事務(wù)的響應(yīng)時間。并發(fā)控制的目標(biāo)73封鎖1、引言所謂加鎖就是事務(wù)T在對某個數(shù)據(jù)對象例如表、記錄等操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象?;镜募渔i類型有2種:排它鎖(Exclusivelocks簡記為X鎖)和共享鎖(Sharelocks簡記為S鎖)封鎖1、引言742、排它鎖(X鎖)排它鎖(X鎖)又稱為寫鎖。若事務(wù)T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對A加任何類型的鎖,直到T釋放A上的鎖。3、共享鎖(S鎖)共享鎖(S鎖)又稱為讀鎖。若事務(wù)T對數(shù)據(jù)對象A加上S鎖,則事務(wù)可以T讀A但不能修改A,其它事務(wù)只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。2、排它鎖(X鎖)754、加鎖協(xié)議在運用X鎖、S鎖對數(shù)據(jù)對象加鎖時,還需要約定一些規(guī)則,例如應(yīng)何時申請X鎖或S鎖、持鎖時間、何時釋放等。這些規(guī)則被稱為加鎖協(xié)議(LockingProtocol)。對加鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的加鎖協(xié)議。應(yīng)注意,不同級別的加鎖協(xié)議達到的系統(tǒng)一致性級別是不同的。4、加鎖協(xié)議761)1級加鎖協(xié)議A、1級加鎖協(xié)議是:事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務(wù)結(jié)束(EOT)才釋放。B、1級加鎖協(xié)議可防止丟失修改,并保證事務(wù)是可恢復(fù)的。C、在1級加鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)而不對其進行修改,則不需要加鎖,所以它不能保證可重復(fù)讀及不讀“臟”數(shù)據(jù)。1)1級加鎖協(xié)議772級加鎖協(xié)議A、2級加鎖協(xié)議是:1級加鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)A之前必須先對其加S鎖,讀完后即可釋放S鎖。B、2級加鎖協(xié)議除了可以防止了丟失修改,還可進一步防止讀“臟”數(shù)據(jù)。2級加鎖協(xié)議783級加鎖協(xié)議A、3級加鎖協(xié)議是:1級加鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)A之前必須先對其加S鎖,直到事務(wù)結(jié)束才釋放。B、3級加鎖協(xié)議除防止了丟失修改和不讀‘臟’數(shù)據(jù)外,還進一步防止了不可重復(fù)讀。3級加鎖協(xié)議79事務(wù)處理技術(shù)ppt課件80活鎖和死鎖1、活鎖如果事務(wù)T1封鎖了數(shù)據(jù)R,事務(wù)T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當(dāng)T1釋放了R上的封鎖之后系統(tǒng)首先批準(zhǔn)了T3的請求,T2仍然等待。然后T4又請求封鎖R,當(dāng)T3釋放了R上的封鎖之后系統(tǒng)又批準(zhǔn)了T4的請求,...,T2有可能永遠等待,這就是活鎖。避免活鎖的簡單方法是采用“先來先服務(wù)”的策略?;铈i和死鎖1、活鎖812、什么是死鎖?和操作系統(tǒng)一樣,基于封鎖的并發(fā)控制方法可能引起死鎖。一個事務(wù)如果申請鎖而沒有獲準(zhǔn),則其必須等待其他事務(wù)釋放鎖。這就形成事務(wù)間的等待關(guān)系。當(dāng)事務(wù)中出現(xiàn)循環(huán)等待時,如果不加干涉,則會一直等待下去,這就是死鎖(deadlock)對于死鎖有兩種方法:一是防止死鎖的出現(xiàn);二是由系統(tǒng)檢測死鎖,一旦發(fā)現(xiàn)則對其處理。2、什么是死鎖?82T1T21)LockR12)LockR23)申請LockR24)申請LockR15)等待等待6)......死鎖T1T2死鎖833、死鎖的預(yù)防防止死鎖的發(fā)生其實就是要破壞產(chǎn)生死鎖的條件。預(yù)防死鎖通常有以下幾種方法:一次封鎖法一次封鎖法要求每個事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行。一次封鎖法雖然可以有效地防止死鎖的發(fā)生,但也存在問題,一次就將以后要用到的全部數(shù)據(jù)加鎖,勢必擴大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。3、死鎖的預(yù)防84順序封鎖法順序封鎖法是預(yù)先對數(shù)據(jù)對象規(guī)定一個封鎖順序,所有事務(wù)都按這個順序?qū)嵭蟹怄i。順序封鎖法可以有效地防止死鎖,但也同樣存在問題。事務(wù)的封鎖請求往往隨著事務(wù)的執(zhí)行而動態(tài)地決定,很難事先確定每一個事務(wù)要封鎖哪些對象,因此也就很難按規(guī)定的順序?qū)?shù)據(jù)對象加封。順序封鎖法854、死鎖的檢測與解除超時法如果一個事務(wù)的等待時間超過了規(guī)定的時限,就認(rèn)為發(fā)生了死鎖。超時法實現(xiàn)簡單,但其不足也很明顯。一是有可能誤判死鎖,事務(wù)因為其他原因使等待時間超過時限,系統(tǒng)會誤認(rèn)為發(fā)生了死鎖。二是時限若設(shè)置得太長,死鎖發(fā)生后不能及時發(fā)現(xiàn)。4、死鎖的檢測與解除86等待圖法事務(wù)等待圖是一個有向圖G=(T,U)。T為結(jié)點的集合,每個結(jié)點表示正運行的事務(wù);U為邊的集合,每條邊表示事務(wù)等待的情況。若T1等待T2,則T1、T2之間劃一條有向邊,從T1指向T2。事務(wù)等待圖動態(tài)地反映了所有事務(wù)的等待情況。并發(fā)控制子系統(tǒng)周期性地(比如每隔1分鐘)檢測事務(wù)等待圖,如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。等待圖法87死鎖的解除死鎖發(fā)生后,靠事務(wù)自身無法解除,必須由DBMS干預(yù)。通常采用的方法是選擇一個處理死鎖代價最小的事務(wù),將其撤消,釋放此事務(wù)持有的所有的鎖,使其它事務(wù)得以繼續(xù)運行下去。當(dāng)然,對撤消的事務(wù)所執(zhí)行的數(shù)據(jù)修改操作必須加以恢復(fù)。死鎖的解除88并發(fā)調(diào)度的可串行性由于計算機系統(tǒng)對并發(fā)操作的調(diào)度是隨機的,不同的調(diào)度可能產(chǎn)生不同的結(jié)果。如果一個事務(wù)運行過程中沒有其他事務(wù)同時運行,也就是說它沒有受到其他事務(wù)的干擾,那么就可以認(rèn)為該事務(wù)的運行結(jié)果是正常的或者預(yù)想的。將所有事務(wù)串行起來的調(diào)度策略一定是正確的調(diào)度策略。雖然以不同的順序串行執(zhí)行事務(wù)可能會產(chǎn)生不同的結(jié)果,但由于不會將數(shù)據(jù)庫置于不一致狀態(tài),所以都是正確的。并發(fā)調(diào)度的可串行性由于計算機系統(tǒng)對并發(fā)操作的調(diào)度是89不同調(diào)度有不同結(jié)果的例子(串行調(diào)度)T1T2讀B讀AA=B+1B=A+1寫回A寫回BA,B初值為2先執(zhí)行完T1,再做T2A=3,B=4先執(zhí)行完T2,再做T1A=4,B=3不同調(diào)度有不同結(jié)果的例子(串行調(diào)度)90串行調(diào)度不可串行化的調(diào)度可串行化的調(diào)度T1T2T1T2T1T2SLockBSLockBSLockBY=B=2Y=B+2Y=B=2UnlockBSLockAUnLockBXLockAX=A=2XlockAA=Y+1UnLockB寫回A(=3)UnLockASlockAUnlockAXLockAA=Y+1等待寫回A(=3)等待SLockAA=Y+1UnLockA等待X=A=3寫回A(=3)X=A=3UnLockAXLockBUnLoc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論