《數(shù)據(jù)庫系統(tǒng)原理與應用-Oracle版》課件第6章_第1頁
《數(shù)據(jù)庫系統(tǒng)原理與應用-Oracle版》課件第6章_第2頁
《數(shù)據(jù)庫系統(tǒng)原理與應用-Oracle版》課件第6章_第3頁
《數(shù)據(jù)庫系統(tǒng)原理與應用-Oracle版》課件第6章_第4頁
《數(shù)據(jù)庫系統(tǒng)原理與應用-Oracle版》課件第6章_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章數(shù)據(jù)庫的事務處理與數(shù)據(jù)恢復6.1事務管理的基本概念6.2并發(fā)控制6.3數(shù)據(jù)庫恢復6.1事務管理的基本概念6.1.1事務(Transaction)的概念6.1.2事務的狀態(tài)6.1.3事務的特性6.1.4SQLServer中的事務返回首頁6.1.1事務(Transaction)的概念事務是用戶定義的數(shù)據(jù)庫操作序列,這些操作可作為一個完整的工作單元。一個事務內(nèi)的所有語句是一個整體,要么全部執(zhí)行,要么全部不執(zhí)行。即事務是不可再分的原子性工作。如在銀行業(yè)務中,“從帳戶A轉(zhuǎn)移資金X到帳戶B”就是一個典型的事務。這個事務可以分解為兩個動作:(1)從賬戶A減去金額X。(2)在賬戶B中加上金額X。返回本節(jié)6.1.2事務的狀態(tài)事務的基本操作包括:(1)事務開始(BEGIN_TRANSACTION)。事務開始執(zhí)行。(2)事務讀寫(Read/Write)。事務進行數(shù)據(jù)操作。(3)事務結(jié)束(END_TRANSACTION)。事務完成所有的讀/寫操作。(4)事務交付(COMMIT_TRANSACTION)。事務完成所有的讀/寫操作,并保存操作結(jié)果。返回本節(jié)6.1.3事務的特性事務所必須具有的重要特性包括:(1)原子性(Atomicity)。(2)一致性(Consistency)。(3)隔離性(Isolation)。(4)持久性(Durability)。上述的四個特性也簡稱為ACID特性,保證ACID特性是事務處理的重要任務。事務的ACID特性可能遭到破壞的原因有:1)多個事務并行運行時,不同事務的操作交叉執(zhí)行。2)事務在運行過程中被強迫停止。返回本節(jié)6.1.4ORACLE中的事務.在Oracle中沒有“開始事務處理”的語句。用戶不能顯式地開始一個事務處理。事務處理會隱式地開始于第一條修改數(shù)據(jù)的語句,或者在一些要求事務處理的場合。數(shù)據(jù)庫事務主要由INSERT、UPDATE、DELETE操作組成。當在應用程序中執(zhí)行第一條SQL時,事務便開始了,當執(zhí)行COMMIT或ROLLBACK語句時事務就結(jié)束了。Oracle中對事務處理的控制語句主要包括COMMIT、ROLLBACK、SAVEPOINT、ROLLBACKTOSAVEPOINT、SETTRANSACTION。(1)提交事務(COMMIT)。在事務處理中,用戶只需要使用COMMIT語句就可以結(jié)束事務。當執(zhí)行COMMIT語句之后,系統(tǒng)確認事務變化、結(jié)束事務、刪除保存點、釋放鎖,其他會話就可以查看到事務變化后的新數(shù)據(jù)了.返回本節(jié)(2)回退事務(ROLLBACK)回退可以撤消已進行的操作。當應用中出現(xiàn)錯誤,或是運行程序的終端用戶決定不保存對數(shù)據(jù)庫數(shù)據(jù)進行的修改時,就需要進行回滾?;貪L事務使用ROLLBACK命令?;赝私K止用戶的事務處理,撤消用戶已經(jīng)進行的對數(shù)據(jù)的所有改變,讀取用戶存儲在回滾段或UNDO表空間中的信息,將數(shù)據(jù)庫塊恢復到用戶處理之前的狀態(tài),且釋放會話所占用的所有鎖定(3)設置保存點(SAVEPOINT)用戶在處理較大事物時中可以建立保存點(SAVEPOINT),用于在必要時取消部分事務。用戶可以在單個事物中擁有多個保存點,當使用ROLLBACKTOSAVEPOINT時,可以讓用戶有選擇地回滾到事物處理中的某特定位置.(4)取消部分事務(ROLLBACKTOSAVEPOINT)為了取消部分事務,可以使用ROLLBACKTOSAVEPOINT命令,也可以調(diào)用包dbms_transaction中過程rollback(5)設置事務只讀屬性設置事務屬性的命令為:SETTRANSACTIONREADONLY只讀事務是指只允許執(zhí)行查詢操作,而不允許執(zhí)行任何數(shù)據(jù)更新操作的事務。使用SETTRANSACTIONREADONLY命令可以確保用戶無法執(zhí)行修改數(shù)據(jù)的操作,通過設置只讀事務,可以有效地將數(shù)據(jù)庫視圖凍結(jié)到某個時間點。也就是說,無論數(shù)據(jù)庫其他會話如何工作,都不會改變只讀事務讀到的數(shù)據(jù)。假定企業(yè)需要在每天16點統(tǒng)計最近24小時的銷售信息,而不統(tǒng)計當天16點之后的銷售信息,那么就可以使用只讀事務,在設置了只讀事務之后,盡管其他會話可能會提交事務,但只讀事務將不會取得新的數(shù)據(jù)變化,從而確保取得特定時間點的數(shù)據(jù)信息6.2并發(fā)控制6.2.1并發(fā)操作引起的問題6.2.2封鎖6.2.3封鎖出現(xiàn)的問題及解決方法6.2.4可串行化調(diào)度6.2.5ORACLE的并發(fā)控制機制返回首頁6.2.1并發(fā)操作引起的問題對事務的并發(fā)執(zhí)行如果不加以控制,可能會導致數(shù)據(jù)庫中數(shù)據(jù)的不一致性。一個最常見的并發(fā)操作的例子是飛機訂票系統(tǒng)中的訂票操作。例如,在該系統(tǒng)中的一個活動的序列:(1)事務T1(動作1):甲售票員讀出某航班的機票余額A,設A=16。(2)事務T2(動作1):乙售票員讀出同一航班的機票余額,A也為16。(3)事務T1(動作2):甲售票員賣出一張機票,修改機票余額A←A-1,所以A=15,把A寫入數(shù)據(jù)庫。(4)事務T2(動作2):乙售票員賣出兩張機票,修改機票余額A←A-2,所以A=14,把A寫入數(shù)據(jù)庫。并發(fā)操作如果不加以控制,就可能引發(fā)下列數(shù)據(jù)的不一致性:1.丟失修改(LostUpdate)2.不可重復讀(UnrepeatableRead)3.讀“臟”數(shù)據(jù)(DirtyRead)1.丟失修改(LostUpdate)丟失修改是指事務T1與事務T2從數(shù)據(jù)庫中讀入同一數(shù)據(jù)并修改,事務T2提交的修改結(jié)果破壞了事務T1提交的修改結(jié)果,導致事務T1的修改被丟失。丟失修改的情況如圖6-2所示。調(diào)度時刻事務T1事務T2t1讀A=16

t2

讀A=16t3A=A-1寫回A=15

t4

A=A-2寫回A=14(覆蓋了T1對A的修改)圖6-2丟失修改2.不可重復讀(UnrepeatableRead)即事務T1兩次讀取同一數(shù)據(jù)項A的內(nèi)容不一致。究其原因,是在兩次讀操作之間,事務T2也修改了數(shù)據(jù)項A。不可重復讀的情況如圖6-3所示。調(diào)度時刻事務T1事務T2t1讀A=50讀B=100求和=150

t2

讀B=100B←B*2寫回B=200t3讀A=50讀B=200求和=250(驗算不對)

圖6-3不可重復讀3.讀“臟”數(shù)據(jù)(DirtyRead)即事務T1讀取了經(jīng)過事務T2修改過的數(shù)據(jù),但是由于事務T2因為流產(chǎn)而撤消了對該數(shù)據(jù)的修改,數(shù)據(jù)庫恢復到事務T2執(zhí)行前的狀態(tài),從而導致事務T1讀取的內(nèi)容與數(shù)據(jù)庫中的內(nèi)容不一致。讀“臟”數(shù)據(jù)的情況如圖6-4所示。調(diào)度時刻事務T1事務T2t1

讀B=100B←B*2寫回B=200t2讀B=200(讀入T2的臟數(shù)據(jù))

t3

ROLLBACK(B恢復為100)圖6-4讀“臟”數(shù)據(jù)返回本節(jié)6.2.2封鎖1.封鎖的類型DBMS通常提供了多種類型的封鎖。一個事務對某個數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制是由封鎖類型決定的?;镜姆怄i類型有兩種:排它鎖(ExclusiveLock,簡稱X鎖)和共享鎖(ShareLock,簡稱為S鎖)。(1)排它鎖。(2)共享鎖。2.保證數(shù)據(jù)一致性的封鎖協(xié)議——三級封鎖協(xié)議所謂封鎖協(xié)議就是在對數(shù)據(jù)庫加鎖、持鎖和釋放鎖時所約定的一些規(guī)則。例如,應何時申請X鎖或S鎖、持鎖時間、何時釋放等。不同的封鎖規(guī)則形成了不同的封鎖協(xié)議,下面介紹三級封鎖協(xié)議。(1)一級封鎖協(xié)議。(2)二級封鎖協(xié)議。(3)三級封鎖協(xié)議(1)一級封鎖協(xié)議。一級封鎖協(xié)議是事務T在修改數(shù)據(jù)之前必須先對其加X鎖,直到事務結(jié)束才釋放。一級封鎖協(xié)議可有效防止丟失修改,并保證事務T是可恢復的。例如,圖6-6使用一級封鎖協(xié)議解決了圖6-2中的丟失修改問題。調(diào)度時刻事務T1事務T2t1獲得XlockA

t2讀A=16XlockA等待t3A=A-1寫回A=15CommitUnlockA等待等待等待t4

獲得XlockA讀A=15A=A-2寫回A=13CommitUnlockA圖6-6沒有丟失修改(2)二級封鎖協(xié)議。二級封鎖協(xié)議是在一級封鎖協(xié)議加上事務T對要讀取的數(shù)據(jù)加S鎖,讀完后即可釋放S鎖。二級封鎖協(xié)議除防止了丟失修改還可進一步防止讀“臟”數(shù)據(jù)。例如,圖6-7使用二級封鎖協(xié)議解決了圖6-4中讀“臟”數(shù)據(jù)的問題。調(diào)度時刻事務T1事務T2t1

XlockB讀B=100B←B*2寫回B=200t2SlockB等待

t3

ROLLBACK(B恢復為100)UnlockBt4獲得SlockB讀B=100UnlockB

圖6-7不讀“臟”數(shù)據(jù)(3)三級封鎖協(xié)議。三級封鎖協(xié)議是事務T在讀取數(shù)據(jù)之前必須先對其加S鎖,在要修改數(shù)據(jù)之前必須先對其加X鎖,直到事務結(jié)束后才釋放所有的鎖。例如圖6-8使用了三級封鎖協(xié)議解決了圖6-3中的不可重復讀問題。調(diào)度時刻事務T1事務T2t1SlockA讀A=50SlockB讀B=100求和=150

t2

XlockB等待t3讀A=50讀B=100求和=150CommitUnlockAUnlockB等待t4

獲得Xlock讀B=100B←B*2寫回B=200CommitUnlockB圖6-8可重復讀封鎖

協(xié)議X鎖S鎖不丟失

修改不讀臟

數(shù)據(jù)可重

復讀一級事務全程加鎖不加鎖√

二級事務全程加鎖事務開始加鎖,讀完即釋放√√

三級事務全程加鎖事務全程加鎖√√√表6-1不同級別的封鎖協(xié)議返回本節(jié)6.2.3封鎖出現(xiàn)的問題及解決方法1.活鎖在多個事務請求對同一數(shù)據(jù)封鎖時,總是使某一事務等待的情況稱為活鎖。例如:如果事務T1封鎖了數(shù)據(jù)R后,T2也請求封鎖R,于是T2等待。接著T3也請求封鎖R。假如T1釋放R上的鎖后,系統(tǒng)首先批準了T3的請求,T2只得繼續(xù)等待。接著T4也請求封鎖R,T3釋放R上的鎖后,系統(tǒng)又批準了T4的請求,……,T2有可能就這樣永遠等待下去。2.死鎖多個并發(fā)事務處于相互等待的狀態(tài),其中的每一個事務都在等待它們中的另一個事務釋放封鎖,這樣才可以繼續(xù)執(zhí)行下去,但任何一個事務都沒有釋放自己已獲得的鎖,也無法獲得其他事務已擁有的鎖,所以只好相互等待下去,這就產(chǎn)生了死鎖。調(diào)度時刻事務T1事務T2t1XlockA

t2

XlockBt3XlockB等待

t4

XlockA等待…圖6-9死鎖目前在數(shù)據(jù)庫中解決死鎖問題主要有兩類方法,一類方法是采取一定措施來預防死鎖的發(fā)生,另一類方法是允許發(fā)生死鎖,然后采用一定手段定期診斷系統(tǒng)中有無死鎖,若有則解除之。(1)死鎖的預防。1)一次封鎖法。2)順序封鎖法。(2)死鎖的檢測與解除。返回本節(jié)6.2.4可串行化調(diào)度所謂的兩段鎖協(xié)議是指所有事務必須分兩個階段對數(shù)據(jù)項進行加鎖和解鎖。具體體現(xiàn)在:(1)在對任何數(shù)據(jù)進行讀、寫操作之前,事務首先要獲得對該數(shù)據(jù)的封鎖;(2)釋放一個封鎖之后,事務不再申請并獲得對任何數(shù)據(jù)的封鎖。所謂兩段鎖的含義是:事務分為兩個階段,第一階段是獲得封鎖,也稱為擴展階段。在這個階段,事務可以申請獲得任何數(shù)據(jù)項上的任何類型的鎖,但不能釋放任何鎖。第二階段是釋放封鎖,也稱為收縮階段。在這個階段,事務可以釋放任何數(shù)據(jù)項上的任何類型的鎖,但是不能申請任何鎖。返回本節(jié)6.2.5ORACLE的并發(fā)控制機制Oracle通過支持事務并發(fā)控制機制來管理多個事務,保證事務的一致性,并使用事務日志保證修改的完整性和可恢復性.在通常情況下,數(shù)據(jù)鎖由系統(tǒng)隱含完成,用戶不用考慮封鎖問題,但Oracle也允許用戶用LOCKTABLE命令顯式對封鎖對象加鎖1.Oracle鎖的類型Oracle的鎖分為兩大類:數(shù)據(jù)鎖(DML鎖)和字典鎖.Oracle的數(shù)據(jù)鎖有5種:共享鎖(S鎖)、排它鎖(X鎖),行級共享鎖(RS鎖)、行級排它鎖(RX鎖)和共享行級排它鎖(SRX鎖),其封鎖粒度包括行級和表級2.Oracle數(shù)據(jù)鎖的一個特點在默認情況下,讀數(shù)據(jù)不加鎖。也就是說,當一個用戶更新數(shù)據(jù)時,另一個用戶可以同時讀取相應數(shù)據(jù)。Oracle通過一個被稱之為回滾段的內(nèi)存結(jié)構(gòu)來保證用戶不讀“臟”數(shù)據(jù)和可重復讀。這樣可以提高數(shù)據(jù)的并發(fā)度6.3數(shù)據(jù)庫恢復6.3.1數(shù)據(jù)庫系統(tǒng)的故障6.3.2數(shù)據(jù)庫備份技術(shù)6.3.3數(shù)據(jù)庫恢復策略返回首頁6.3.1數(shù)據(jù)庫系統(tǒng)的故障1.事務故障2.系統(tǒng)故障3.介質(zhì)故障返回本節(jié)6.3.2數(shù)據(jù)庫備份技術(shù)1.數(shù)據(jù)轉(zhuǎn)儲2.日志文件1.數(shù)據(jù)轉(zhuǎn)儲(1)靜態(tài)轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲。1)靜態(tài)轉(zhuǎn)儲是在系統(tǒng)中沒有運行其他事務時進行的轉(zhuǎn)儲操作。2)動態(tài)轉(zhuǎn)儲是指轉(zhuǎn)儲操作與用戶事務并發(fā)進行,轉(zhuǎn)儲期間允許對數(shù)據(jù)庫進行存取或修改。(2)海量轉(zhuǎn)儲和增量轉(zhuǎn)儲。海量轉(zhuǎn)儲是指每次轉(zhuǎn)儲全部數(shù)據(jù)庫。增量轉(zhuǎn)儲是指轉(zhuǎn)儲上次轉(zhuǎn)儲后更新過的數(shù)據(jù)。2.日志文件(1)日志文件的格式和內(nèi)容。各個事務的開始(BEGINTRANSACTION)標記。事務標識(標明是哪個事務)。操作的類型(插入、刪除或修改)。操作對象。更新前數(shù)據(jù)的舊值(對插入操作而言,此項為空值)。更新后數(shù)據(jù)的新值(對刪除操作而言,此項為空值)。各個事務的結(jié)束(COMMIT或ROLLBACK)標記。(2)登記日志文件。返回本節(jié)6.3.3數(shù)據(jù)庫恢復策略1.事務故障的恢復具體的恢復步驟為:(1)反向掃描文件日志(即從最后向前掃描日志文件),查找該事務

溫馨提示

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

評論

0/150

提交評論