《數(shù)據(jù)庫技術》課件第16章 事務處理與鎖3.0_第1頁
《數(shù)據(jù)庫技術》課件第16章 事務處理與鎖3.0_第2頁
《數(shù)據(jù)庫技術》課件第16章 事務處理與鎖3.0_第3頁
《數(shù)據(jù)庫技術》課件第16章 事務處理與鎖3.0_第4頁
《數(shù)據(jù)庫技術》課件第16章 事務處理與鎖3.0_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

16事務處理與鎖事務在DBMS中處于核心地位并發(fā)控制以事務為單位數(shù)據(jù)庫恢復以事務為單位2015-816-2Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖理論和實踐主要貢獻者—JamesGray1944.1.12,生于加州舊金山1961~1966,BS,UCB,數(shù)學Bell實驗室,參與Multics項目1969,PhD,UCB,程序語言1973,IBM,參與SystemR項目1995,Microsoft因數(shù)據(jù)庫和事務處理的貢獻,獲1998年度圖靈獎2007-01-28,失蹤2015-816-3Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖JamesGray2015-816-4Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖什么是事務事務是若干操作的集合。集合中的所有操作要么都完成,要么都取消。2015-816-5Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖事務舉例—超市付款在超市買了一盒牙膏(5元),一袋洗衣粉(10元),最后付款,超市收銀系統(tǒng)需要依次執(zhí)行下面操作牙膏庫存量-1洗衣粉庫存量-1你的銀行卡余額-15超市賬戶余額+15以上四個操作要么都完成,要么都取消2015-816-6Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖事務的ACID屬性AtomicityCorrectnessIsolationDurability2015-816-7Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖事務的兩種基本操作commit把重做緩沖區(qū)的數(shù)據(jù)寫入重做文件釋放事務中的鎖把commit操作的scn號寫入重做文件rollback把undo表空間中的舊數(shù)據(jù)替換新數(shù)據(jù),撤銷事務中的操作效果2015-816-8Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖commit背后把重做緩沖區(qū)的數(shù)據(jù)寫入重做文件釋放事務中的鎖把commit操作的scn號寫入重做文件2015-816-9Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖DDL與DCL的事務處理方式在執(zhí)行的語句前后自動執(zhí)行commit2015-816-10Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖SQL標準中的四種隔離級別readcommitted只能讀取到其他連接提交后的修改結果

readunommitted讀取到其他連接未提交的修改結果,Oracle支持repeatable事務中的第一次讀取結果在第二次讀取中不會改變serializable事務中的兩次讀取操作完全相同,Oracle支持2015-816-11Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖并發(fā)控制要解決的問題丟失更新臟讀不可重復讀2015-816-12Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖丟失更新示例為了促銷,超市要降低某商品的價格,降價條件有兩個:若其當前價格高于100元,則把價格調(diào)整為原來的1/2(即五折),若庫存量高于1000,則把價格調(diào)整為原來的4/5(即八折),兩個條件是獨立的,如果兩個條件都滿足,價格五折后,再八折。如某商品當前價格為200,庫存量1500,則降價的兩個條件均滿足,五折后,其價格降低至100,再八折后,其價格降低至80,這樣其最后價格為80。2015-816-13Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖丟失更新示例若工作人員A依據(jù)第一個條件調(diào)價,工作人員B依據(jù)第二個條件調(diào)價,分別使用兩個連接,操作順序如下:2015-816-14Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖丟失更新示例兩個工作人員各自完成上述操作后,工作人員B把A的修改結果覆蓋了,導致最后價格不是80,而是160。雖然兩個工作人員的操作步驟都是正確的,因為沒有合適的并發(fā)控制,導致最后的結果是錯誤的。2015-816-15Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖臟讀臟讀是指一個連接讀取了其他尚未提交的事務修改的數(shù)據(jù)。臟讀破壞了事務的原子性,讀取到的是事務進行過程中的中間結果,若此結果與事務結束時的結果不同,則此連接讀取的是錯誤數(shù)據(jù),如果以此錯誤數(shù)據(jù)為依據(jù)繼續(xù)執(zhí)行另外的任務,則可能造成一連串的錯誤。2015-816-16Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖臟讀示例一顧客購買了2支鋼筆、10個筆記本,總價100元,收銀員在連接A完成收銀操作,超市采購員在連接B查詢商品庫存,確定某種商品是否需要進貨。假定收銀開始前,鋼筆庫存量為100,筆記本庫存量為300,下面是兩個連接在不同時間進行的操作:2015-816-17Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖不可重復讀不可重復讀是指一個事務中的查詢操作因為分為多個步驟,導致其結果既包括了某個事務開始之前的數(shù)據(jù),也包括了這個事務開始之后的數(shù)據(jù),從而在最后得到了錯誤的查詢結果。2015-816-18Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖不可重復讀示例各帳號初始值2015-816-19Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖不可重復讀示例用戶A查詢銀行三個賬號的余額總和。用戶B由acc3賬號轉(zhuǎn)賬100至acc1。2015-816-20Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖Oracle對三個并發(fā)問題的解決方法丟失更新:通過鎖解決。臟讀問題:通過多版本數(shù)據(jù)解決。不可重復讀:通過多版本數(shù)據(jù)解決把連接的事務隔離級別設置為serializable,本連接的查詢只能讀取到事務開始之前的數(shù)據(jù)。2015-816-21Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖鎖鎖是用來控制訪問共享資源的一種機制目的是把并發(fā)操作串行化2015-816-22Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖Oracle自動附加的鎖DML鎖(數(shù)據(jù)鎖)保護修改的數(shù)據(jù)不被其他事務并發(fā)修改DDL鎖(數(shù)據(jù)字典鎖)避免DDL語句操作的對象被其他用戶修改而附加的鎖在DDL操作完成后,會自動執(zhí)行commit操作DDL鎖持續(xù)的時間很短內(nèi)部栓鎖(Internallocksandlatches)內(nèi)存中的臨時鎖2015-816-23Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖DML鎖TM(表鎖)若一個表的某行記錄被附加了TX鎖,Oracle會自動在此表上附加TM鎖鎖住被修改的表,防止其他事務對此表執(zhí)行DDL語句LOCKTABLE命令也可以手工附加TM鎖與DDL鎖的區(qū)別?TX(行鎖)UPDATE、INSERT、DELETE、MERGE以及SELECT...FORUPDATE操作產(chǎn)生對DML操作修改的每行記錄附加排他鎖TX鎖直到事務結束時才釋放2015-816-24Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖v$lock查詢鎖的信息type列表示鎖的類型。type為TM時,v$lock中的id1字段表示鎖住的對象id編號(object_id),通過dba_objects可以查詢其所對應的對象名稱。type為TX時,id1及id2列表示獲得鎖的事務信息。ctime列表示鎖持續(xù)的時間。2015-816-25Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖v$lock查詢示例SQL>selectsid,usernamefromv$session2whereusername='SCOTT'3/SIDUSERNAME------------------------------140SCOTTSQL>selectsid,type,id1,id2fromv$lock2wheresid=1403/

SIDTYID1ID2-----------------------------------140AE990140TM199930140TX4587746122015-816-26Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖v$lock查詢示例SQL>colobject_namefora15SQL>selectobject_id,object_namefromdba_objects2whereobject_id=199933/

OBJECT_IDOBJECT_NAME-------------------------19993DEPT2015-816-27Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖死鎖2015-816-28Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖兩個或多個事務同時處于等待狀態(tài),每個事務都在等待另一個事務釋放對某個資源鎖定后才能繼續(xù)自己的操作。死鎖的產(chǎn)生R1和R2表示兩種需要鎖定的資源2015-816-29Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖模擬死鎖的產(chǎn)生兩個事務需要修改dept表的10號部門和20號部門的地址,這兩行記錄相當于上圖中需要鎖定的資源R1和R22015-816-30Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖模擬死鎖的產(chǎn)生SQL>--conn1SQL>updatedeptsetloc='BOSTON'wheredeptno=10;SQL>--conn2SQL>updatedeptsetloc='CHICAGO'wheredeptno=20;SQL>--conn1SQL>updatedeptsetloc='NEWYORK'wheredeptno=20;SQL>--conn2SQL>updatedeptsetloc='DALLAS'wheredeptno=10;SQL>--conn1SQL>updatedeptsetloc='NEWYORK'wheredeptno=20;updatedeptsetloc='NEWYORK'wheredeptno=20*第1行出現(xiàn)錯誤:ORA-00060:等待資源時檢測到死鎖注意:Oracle的查詢操作不使用鎖,修改數(shù)據(jù)時附加行鎖,與其他數(shù)據(jù)庫產(chǎn)品相比,一般較少發(fā)生死鎖。2015-816-31Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖鎖的升級和轉(zhuǎn)換Oracle的查詢操作不使用鎖,修改數(shù)據(jù)時附加行鎖,與其他數(shù)據(jù)庫產(chǎn)品相比,一般較少發(fā)生死鎖。2015-816-32Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖多版本數(shù)據(jù)技術執(zhí)行數(shù)據(jù)修改時,舊版本數(shù)據(jù)會存入undo表空間。用于保證讀寫一致性和回滾操作。解決了以下兩個問題實現(xiàn)了讀一致性,解決了臟讀問題讀取操作不需要加鎖,使得讀寫操作不會相互等待兩種隔離級別下,多版本數(shù)據(jù)的應用稍有不同若連接為readcommitted級別,則此連接中的查詢操作總是讀到與其時間距離最近的事務提交的結果,稱為語句級別讀一致性。若連接為serializable級別,則此連接中執(zhí)行的查詢都只能讀取到此查詢所在事務開始之前的數(shù)據(jù),稱為事務級別讀一致性。2015-816-33Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖Oracle解決三個并發(fā)控制問題的方法丟失更新通過鎖解決把兩個并發(fā)修改操作串行化,第二次執(zhí)行修改操作時,是在第一次修改操作完成后的結果上進行的。臟讀通過多版本數(shù)據(jù)解決如果一個連接讀取的數(shù)據(jù)正在被其他事務修改,則此連接讀取其舊版本數(shù)據(jù)。不可重復讀通過多版本數(shù)據(jù)解決。把連接的事務隔離級別設置為serializable,本連接的查詢只能讀取到事務開始之前的數(shù)據(jù)。2015-816-34Oracle數(shù)據(jù)庫系統(tǒng)原理-第16章事務處理與鎖實例恢復事務提交之前,其修改的部分數(shù)據(jù)可能已經(jīng)寫入磁盤,而提交之后,可能會有被修改的數(shù)據(jù)尚未寫入磁盤,這樣的數(shù)據(jù)庫顯然處于不一致的狀態(tài)。如果數(shù)據(jù)庫運行時,服務器發(fā)生了故障,導致意外關閉,則在數(shù)據(jù)庫重啟時,需要進行實例恢復。實例恢復包括前滾和回滾兩個過程,整個過程由Oracle自動完成。2

溫馨提示

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

評論

0/150

提交評論