《交易管理(精品).ppt》由会员分享,可在线阅读,更多相关《交易管理(精品).ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、交易管理交易管理導論交易的執行並行處理的問題交易失敗的問題交易和系統的概念ACID的性質系統運作追蹤檔正確的交易排程正確的交易復原正確的交易並行利用鎖定來產生正確的交易排程嚴格兩階段鎖定法多層次鎖定SQL對交易的支援1黃三益2007資料庫的核心理論與實務第三版1.INSERT INTO TransactionVALUES(93000,b0922468,cart,)2.INSERT INTO RecordVALUES(93000,b30999,1,500);3.INSERT INTO RecordVALUES(93000,d11222,1,300);4.INSERT INTO RecordVAL
2、UES(93000,b10234,2,550);導論導論資料庫交易指的是將數個資料存取或更新的動作當成一個整體如果在執行過程中有任何的差錯,這些動作可以全部取消,好像從沒有發生過一樣如果沒有差錯,則這些交易的效果保證永久存在,即使將來系統當機亦然。範例失敗還原交易2黃三益2007資料庫的核心理論與實務第三版交易的執行交易的執行資料庫交易被定義成是一個資料庫程式的執行一次執行可能包括數個SQL敘述,SQL敘述的執行其實也就是對資料庫裡資料的讀或寫每次執行一個資料庫程式所產生的SQL敘述可能會不同,因為程式裡可能會有判斷式(如IFTHENELSE)每次執行都被視為一個交易觀念上,一個交易是由數個以
3、下五種基本運算動作所組成:begin(T):表示一個交易T開始執行。read(X,x):表示從硬碟讀取資料項X到主記憶體變數x。write(x,X):表示將主記憶體變數x寫至硬碟資料項X。commit(T):表示一個交易T成功的結束。abort(T):表示一個交易T被駁回,其以前做過的動作因此全部還原。3黃三益2007資料庫的核心理論與實務第三版交易的並行處理交易的並行處理一般DBMS會同時交錯處理數個交易的運算,稱為並行處理因為循序處理既沒效率也浪費資源DBMS如果任意交錯執行,有可能造成錯誤的執行結果更新遺失的問題(TheLostUpdateProblem)污染讀取的問題(TheDirty
4、ReadProblem)無法重複讀取的問題(TheNon-repeatableReadProblem)幽靈資料的問題(ThePhantomProblem)4黃三益2007資料庫的核心理論與實務第三版更新遺失的問題P1P2begin(T1)read(X,a);a=a+10;write(a,X)commit(T1)begin(T2)read(X,b);b=b+20;write(b,X)commit(T2)T1T21begin(T1)2read(X,a);3begin(T2)4read(X,b);5write(a,X)6commit(T1)7write(b,X)8commit(T2)一開始X=100
5、P1和P2都執行後的正確結果:X=130X=120交錯執行此更新的結果被蓋過去了!此更新的結果被蓋過去了!5黃三益2007資料庫的核心理論與實務第三版污染讀取的問題P1P2begin(T1)read(X,a);a=a+10;write(a,X)abort(T1)begin(T2)read(X,b);b=b+20;write(b,X)commit(T2)T1T21begin(T1)2read(X,a);3write(a,X)4begin(T2)5read(X,b);6abort(T1)7write(b,X)8commit(T2)一開始X=100P1和P2執行後的正確結果:X=120X=130讀取
6、到的資料後來被還原了!讀取到的資料後來被還原了!交錯執行6黃三益2007資料庫的核心理論與實務第三版無法重複讀取的問題P1P2begin(T1)read(X,a);a=a+10;write(a,X)commit(T1)begin(T2)read(X,b);read(X,b)commit(T2)T1T21begin(T1)2begin(T2)3read(X,b);4read(X,a);5write(a,X)6commit(T1)7read(X,b);8commit(T2)b=100b=110一開始X=100P2讀取X兩次的結果應該相同交錯執行兩次讀取到的資料不一樣!兩次讀取到的資料不一樣!7黃三
7、益2007資料庫的核心理論與實務第三版幽靈資料的問題P1P2begin(T1)I1=”INSERT INTO Product(pNo,unitPrice)VALUES(b40000,600);Exec(I1);commit(T1)begin(T2)Q1=”SELECT*FROM Product WHERE unitPrice 500”;Exec(Q1);Exec(Q1);commit(T2)T1T21begin(T1)2begin(T2)3Exec(Q1);4Exec(I1);5Exec(Q1);6commit(T1)7commit(T2)n筆記錄n+1筆記錄好像多了一筆幽靈記錄!好像多了一筆
8、幽靈記錄!8黃三益2007資料庫的核心理論與實務第三版練習12-1:請問右列交易的交錯執行會造成何種問題:Ans:若是(第11行)T2最後commit,則造成更新遺失的問題和無法重複讀取的問題若是(第11行)T2最後abort,則造成污染讀取的問題。T1T21begin(T1)2begin(T2)3read(X,b);b=b+104read(X,a);a=a+105read(Y,c)6write(b,X)7write(b,Y)8write(a,X)9read(Y,c)10commit(T1)11commit(T2)或 abort(T2)9黃三益2007資料庫的核心理論與實務第三版交易的失敗交易
9、處理的一個基本原則:全部或沒有(All or Nothing)交易執行遭受失敗就需要復原,可能的失敗原因有:應用系統駁回應用系統駁回由應用系統主動提出的駁回,原因是繼續執行下去會導致現實世界裡錯誤的結果電腦系統駁回電腦系統駁回電腦系統的軟硬體造成交易執行突然終止儲存媒體毀損儲存媒體毀損DBMS處理交易時考量10黃三益2007資料庫的核心理論與實務第三版交易執行所應具備的性質ACID性質Atomicity(單元性):一個交易被視為一個不可分割的單元Consistency(一致性):一個交易裡的整體運算應該要滿足現實世界裡一致性的要求Isolation(獨立性):每一個交易在執行時,可將資料庫看成
10、其專屬,而不用去考慮其他交易的存在Durability(永久性):一個交易一旦COMMIT後,其結果就該永久存在資料庫裡11黃三益2007資料庫的核心理論與實務第三版系統追蹤檔(Systemlog)為了正確的處理交易COMMIT和ABORT,DBMS將交易的運算記錄存在系統追蹤檔,有以下五種記錄:交易開始記錄:格式為start,交易編號交易資料項讀取記錄:格式為read,交易編號,資料項編號交易資料項寫入記錄:格式為write,交易編號,資料項編號,開始位置,寫入前的值,寫入後的值交易COMMIT記錄:格式為commit,交易編號交易ABORT記錄:格式為abort,交易編號範例start,t
11、0001read,t0001,p3read,t0001,p15read,t0001,p9write,t0001,p9,200,英雄,狗熊commit,t000112黃三益2007資料庫的核心理論與實務第三版資料和追蹤記錄系統追蹤檔和資料頁分別在主記憶體裡都有緩衝區13黃三益2007資料庫的核心理論與實務第三版交易開始/讀取/寫入:執行運算動作後將相對的追蹤記錄寫入系統追蹤檔緩衝區裡交易COMMIT:COMMIT追蹤記錄寫入系統追蹤檔緩衝區將緩衝區裡所有的追蹤記錄全部寫入硬碟全部寫入硬碟交易ABORT:將ABORT追蹤記錄寫入系統追蹤檔緩衝區將其追蹤記錄的資料項寫入記錄反向執行一次,復原其寫入前
12、的值將緩衝區裡所有的追蹤記錄全部寫入硬碟全部寫入硬碟運算動作14黃三益2007資料庫的核心理論與實務第三版系統復原動作系統當機是無預警的已執行完畢(COMMIT)的交易資料必須保留正在執行中的交易被視為ABORT復原動作如下:將硬碟裡系統追蹤檔裡記錄的運算動作從頭重作(Redo)一次然後再反向將被視為ABORT的交易動作還原(Undo)15黃三益2007資料庫的核心理論與實務第三版系統復原動作(Cont.)為避免系統追蹤檔太大和復原時間過長,DBMS可以在每隔一段時間設置一個檢查點(Checkpoint),動作如下:暫停所有交易的執行。將所有緩衝區裡的追蹤記錄寫入硬碟內。將所有更新過的資料頁從
13、主記憶体寫入磁碟內加入一個追蹤記錄checkpoint,裡頭記載此時有哪些交易還在執行中,並將之寫入硬碟內。恢復交易的執行。系統復原時,DBMS只要從最近的檢查點開始往後進行重作的動作16黃三益2007資料庫的核心理論與實務第三版範例一一開始,X=0Y=0Z=0A=0B=0C=0;假設系統不主動將資料頁寫回硬碟17黃三益2007資料庫的核心理論與實務第三版範例一還未執行時記憶體硬碟資料頁X=0,Y=0,Z=0,A=0,B=0,C=0系統追蹤檔18黃三益2007資料庫的核心理論與實務第三版範例一T1-begin,r1(X),w1(5,X),T2-begin,r2(Y),w2(10,Y),r1(Z
14、),w1(15,Z)執行commit1前記憶體硬碟資料頁X=5,Y=10,Z=15X=0,Y=0,Z=0,A=0,B=0,C=0系統追蹤檔T1-begin,r1(X),w1(0,X,5),T2-begin,r2(Y),w2(0,Y,10),r1(Z),w1(0,Z,15)19黃三益2007資料庫的核心理論與實務第三版範例一T1-begin,r1(X),w1(5,X),T2-begin,r2(Y),w2(10,Y),r1(Z),w1(15,Z),commit1執行commit1後記憶體硬碟資料頁X=5,Y=10,Z=15X=0,Y=0,Z=0,A=0,B=0,C=0系統追蹤檔T1-begin,r
15、1(X),w1(0,X,5),T2-begin,r2(Y),w2(0,Y,10),r1(Z),w1(0,Z,15),T1-commit20黃三益2007資料庫的核心理論與實務第三版範例一T1-begin,r1(X),w1(5,X),T2-begin,r2(Y),w2(10,Y),r1(Z),w1(15,Z),commit1,r2(A),r2(B),w2(10,A),checkpoint執行checkpoint後記憶體硬碟資料頁X=5,Y=10,Z=15,A=10X=5,Y=10,Z=15,A=10,B=0,C=0系統追蹤檔T1-begin,r1(X),w1(0,X,5),T2-begin,r2
16、(Y),w2(0,Y,10),r1(Z),w1(0,Z,15),T1-commit,r2(A),r2(B),w2(0,A,10),checkpoint21黃三益2007資料庫的核心理論與實務第三版範例一T1-begin,r1(x),w1(5,x),T2-begin,r2(y),w2(10,y),r1(z),w1(15,z),commit1,r2(a),r2(b),w2(10,a),checkpoint,w2(30,b),T3-begin,r3(c),w3(40,c),commit2,r3(a),w3(50,a)|執行到系統當機前|時記憶體硬碟資料頁X=5,Y=10,Z=15,A=50,B=30
17、,C=40X=5,Y=10,Z=15,A=10,B=0,C=0系統追蹤檔r3(A),w3(10,A,50)T1-begin,r1(X),w1(0,X,5),T2-begin,r2(Y),w2(0,Y,10),r1(Z),w1(0,Z,15),T1-commit,r2(A),r2(B),w2(0,A,10),checkpoint,w2(0,B,30),T3-begin,r3(C),w3(0,C,40),T2-commit22黃三益2007資料庫的核心理論與實務第三版範例一T1-begin,r1(x),w1(5,x),T2-begin,r2(y),w2(10,y),r1(z),w1(15,z),c
18、ommit1,r2(a),r2(b),w2(10,a),checkpoint,w2(30,b),T3-begin,r3(c),w3(40,c),commit2,r3(a),w3(50,a)|系統重新當機後並做完復原動作後記憶體硬碟資料頁B=30,C=0X=5,Y=10,Z=15,A=10,B=30,C=0系統追蹤檔T1-begin,r1(X),w1(5,X,0),T2-begin,r2(Y),w2(0,Y,10),r1(Z),w1(0,Z,15),T1-commit,r2(A),r2(B),w2(0,A,10),checkpoint,w2(0,B,30),T3-begin,r3(C),w3(0
19、,C,40),T2-commitRedo:B=30C=40Uodo:C=023黃三益2007資料庫的核心理論與實務第三版練習12-2考慮一個交易有以下的系統追蹤記錄:start,t0001read,t0001,p3write,t0001,p3,135,資料庫理論與實務,資料庫實務與理論read,t0001,p15write,t0001,p15,310,5566專輯,7788專輯read,t0001,p9write,t0001,p9,200,英雄,狗熊commit,t0001請問若要將這個交易所修改過的資料寫回硬碟,需寫入幾個硬碟頁?由此推論為何在COMMIT時,DBMS是選擇將該交易的系統追蹤
20、記錄寫入硬碟,而不是將該交易所修改過的資料寫回硬碟。Ans:資料:3個硬碟頁系統追蹤記錄:1個硬碟頁24黃三益2007資料庫的核心理論與實務第三版正確的交易交錯執行DBMS裡有一個交易排程模組(Transactionscheduler),交易排程模組決定交易運算的執行次序但交易排程模組該根據什麼來調整交易運算次序?根據交易復原交易並行25黃三益2007資料庫的核心理論與實務第三版根據交易復原來評判交易排程可復原(可復原(Recoverable)的排程)的排程一個排程S裡,對任兩個交易Ti和Tj且Tj讀取Ti的資料,若Ti的COMMIT或ABORT都在Tj的COMMIT或ABORT之前,則稱S是
21、可復原可復原的交易排程右例排程不可復原T1被ABORTT2應跟著被ABORT但T2已經被COMMITT1T21begin(T1)2read(X,a);3write(a,X)4begin(T2)5read(X,b);6write(b,X)7commit(T2)8abort(T1)26黃三益2007資料庫的核心理論與實務第三版根據交易復原來評判交易排程(Cont)無連鎖駁回(無連鎖駁回(Cascadingless)的排程)的排程一個排程S裡,對任兩個交易Ti和Tj且Tj讀取Ti的資料,若Tj讀取Ti資料的運算動作都在Ti的COMMIT或ABORT之後,則稱S是無連鎖駁回無連鎖駁回的交易排程右例排程
22、需連鎖駁回T1被ABORTT2會跟著被ABORTT1T21begin(T1)2read(X,a);3write(a,X)4begin(T2)5read(X,b);6write(b,X)7abort(T1)827黃三益2007資料庫的核心理論與實務第三版根據交易復原來評判交易排程(Cont)嚴格(嚴格(Strict)的排程)的排程一個排程S裡,對任兩個交易Ti和Tj且Tj讀取或寫入Ti的資料,若Tj讀取或寫入Ti資料的運算動作都在Ti的COMMIT或ABORT之後,則稱S是嚴格嚴格的交易排程右例排程不嚴格T1被ABORT假設X的初值為100X會被還原成100T1T21begin(T1)2writ
23、e(200,X);3begin(T2)4write(300,X);5Commit(T2)6Abort(T1)28黃三益2007資料庫的核心理論與實務第三版練習12-3請列出可復原的排程,無連鎖駁回的排程,和嚴格的排程之間的從屬關係Ans:嚴格的排程一定是無連鎖駁回的排程,而無連鎖駁回的排程也一定是可復原的排程29黃三益2007資料庫的核心理論與實務第三版根據交易並行來評判交易排程交易順序執行(Serialexecution)便是正確的排程如果交錯執行的結果可以等同於某一種順序執行的方式,應該也是正確的!這種交易排程就被稱為可順序的(Serializable)兩個運算動作op1和op2如果滿足以
24、下條件,則視為衝突:op1和op2分屬不同的交易。op1和op2作用在同一個資料項。op1和op2至少有一個是寫入運算。30黃三益2007資料庫的核心理論與實務第三版等同(Equivalent)交易排程如果兩個交易排程S1和S2裡的每一對衝突運算次序都相同,則稱S1和S2為等同交易排程T1T21begin(T1)2read(X,a);3write(X,a)4begin(T2)5read(X,b);6write(b,X)7write(c,Y)8read(Y,d)commit(T2)commit(T1)T1T21begin(T1)2read(X,a);3write(X,a)4begin(T2)5r
25、ead(X,b);6write(c,Y)7write(b,X)8read(Y,d)commit(T2)commit(T1)31黃三益2007資料庫的核心理論與實務第三版可順序的(可順序的(Serializable)排程)排程對於一個交易排程S,如果存在著另一個順序排程T,使得S和T為等同交易排程,則稱S為可順序的排程T1T21begin(T1)2read(X,a);3write(X,a)4write(c,Y)5commit(T1)6begin(T2)7read(X,b);8write(b,X)read(Y,d)commit(T2)T1T21begin(T1)2read(X,a);3write(
26、X,a)4begin(T2)5read(X,b);6write(b,X)7write(c,Y)8read(Y,d)commit(T2)commit(T1)32黃三益2007資料庫的核心理論與實務第三版練習X-4考慮n個交易的執行,請問有幾種順序執行的方式?Ans:共有n!個33黃三益2007資料庫的核心理論與實務第三版驗證排程的可順序性一個排程可表示成可順序圖,用來表示交易間的衝突運算的先後次序節點為交易有向邊表示交易的先後次序若可順序圖裡不存在迴圈,該排程就是可順序的排程T1T2T31begin(T1)2read(X,a);3write(a,X)4begin(T2)5begin(T3)6wr
27、ite(c,Z)7read(X,b);8read(Z,d);9write(b,Y)10commit(T2)11read(Y,e);12write(e,Z)13commit(T3)14commit(T1)T1T2T334黃三益2007資料庫的核心理論與實務第三版驗證排程的可順序性(Cont.)T1T2T31begin(T1)2read(X,a);3write(a,X)4begin(T2)5begin(T3)6read(X,b);7read(Z,d);8write(b,Y)9commit(T2)10read(Y,e);11write(e,Z)12write(c,Z)13commit(T3)14co
28、mmit(T1)此排程為不可順序排程35黃三益2007資料庫的核心理論與實務第三版練習X-5請問右列交易排程是否是可順序的?Ans:否T1T2T31begin(T1)2read(X,a)3write(a,X)4begin(T2)5begin(T3)6read(X,b);7read(Z,d);8write(c,Z)9write(b,Y)10commit(T2)11read(Y,e);12write(e,Z)13commit(T3)14commit(T1)T1T3T2XYZT1T3T2XYZ36黃三益2007資料庫的核心理論與實務第三版嚴格兩階段鎖定法基本鎖定機制每一個資料項都有附屬一個鎖(Loc
29、k),有三種可能值SHARED_LOCKED(分享鎖定分享鎖定):讀取資料項前EXCLUSIVE_LOCKED(獨佔鎖定獨佔鎖定):寫入資料項前UNLOCKED(沒有鎖定沒有鎖定):資料項處理完畢後UNLOCKEDSHARED_LOCKEDEXCLUSIVE_LOCKED讀取讀取允許(並設成允許(並設成SHARED_LOCKED)允許允許不允許(並等待)不允許(並等待)寫入寫入允許(並設成允許(並設成EXCLUSIVE_LOCKED)不允許(並等待)不允許(並等待)不允許(並等待)不允許(並等待)解除鎖定解除鎖定N/A若已經沒有交易讀取,若已經沒有交易讀取,則設為則設為UNLOCKED設為設為
30、UNLOCKED37黃三益2007資料庫的核心理論與實務第三版嚴格兩階段鎖定法嚴格兩階段鎖定遵守基本鎖定機制運算動作執行完後並不馬上解除相關資料項的鎖定,而是到最後COMMIT或ABORT時才一起解除1.begin(T1)2.T1.read(X,)3.begin(T2)4.T2.read(X,)5.T2.write(,X)mit(T2)mit(T1)1.begin(T1)2.T1.read(X,)3.begin(T2)4.T2.read(X,)mit(T1)5.T2.write(,X)mit(T2)T2必須等待38黃三益2007資料庫的核心理論與實務第三版多層次鎖定一個資料項可以是整個資料庫、
31、一個檔案、一個資料表、一個硬碟頁、一筆記錄,甚至是一個欄位小單位的好處:可允許較多的交易並行處理,減少不必要的鎖定大單位的好處:減少鎖定的負荷彈性的作法是將這些資料項的單位依大小視為一個階層資料庫檔案資料表硬碟頁記錄處理查詢時,視所需存取的資料量和位置,決定鎖定的單位和種類。39黃三益2007資料庫的核心理論與實務第三版多層次鎖定(Cont.)對於一個資料項X,有五種可能的鎖定方式IS(IntentionalShared):表示將讀取層次在X下的某個資料項IX(IntentionalExclusive):表示將修改層次在X下的某個資料項S(Shared):表示將讀取資料項XX(eXclusiv
32、e):表示其將修改資料項XSIX(Shared-Intentional-eXclusive):表示將讀取資料項X並修改層次在X下的某個資料項。依所要存取的記錄之存在位置和數量將鎖定(S或X)設定在適當的單位,而該單位的所有上級單位也要設成適當的鎖定(IS、IX,或SIX)鎖定解除的時機則如同兩階段鎖定法般是在交易COMMIT或ABORT時40黃三益2007資料庫的核心理論與實務第三版多層次鎖定(Cont.)修改位於(db,t1,p1)的一筆記錄r11和位於(db,t1,p2)的另一筆記錄r21IX(db),IX(t1),IX(p1),IX(p2),X(r11),X(r21)讀取位於(db,t2
33、,p3)的一筆記錄r31和位於(db,t3,p4)裡的所有記錄IS(db),IS(t2),IS(p3),S(r31),IS(t3),S(p4)讀取位於(db,t5)裡的所有記錄,並修改(db,t5,p5)裡的所有記錄IX(db),SIX(t5),X(p5)鎖定狀態鎖定狀態 鎖定要求鎖定要求ISIXSSIXXIS允許允許允許允許允許允許允許允許不允許不允許IX允許允許允許允許不允許不允許不允許不允許不允許不允許S允許允許不允許不允許允許允許不允許不允許不允許不允許SIX允許允許不允許不允許不允許不允許不允許不允許不允許不允許X不允許不允許不允許不允許不允許不允許不允許不允許不允許不允許41黃三益
34、2007資料庫的核心理論與實務第三版多層次鎖定考慮以下三個交易T1:修改位於(db,t1,p1)的一筆記錄r11T1:IX(db),IX(t1),IX(p1),X(r11)T2:讀取位於(db,t1,p1)的一筆記錄r12IS(db),IS(t1),IS(p1),S(r12)T3:讀取(db,t1,p1)裡的所有記錄IS(db),IS(t1),S(p1)相容性T1與T2沒有衝突T2與T3沒有衝突T1與T3衝突42黃三益2007資料庫的核心理論與實務第三版SQL對交易的支援SETTRANSACTION不同的資料庫應用系統對於交易執行的正確性要求可能有別範例指令:SETTRANSACTIONREP
35、EATABLEREAD污染讀取的問題無法重複讀取的問題幽靈資料的問題READ UNCOMMITTEDREAD COMMITEDREPEATABLE READSERIAZABILITY43黃三益2007資料庫的核心理論與實務第三版SQL對交易的支援COMMIT/ROLLBACKSQL不用ABORT這個字,改用ROLLBACKSAVEPOINTSQL允許在交易執行過程中設暫存點(Savepoint),當交易執行發生問題時,可以選擇讓資料庫回復到某一個暫存點的資料庫狀態44黃三益2007資料庫的核心理論與實務第三版PL/SQL範例DECLAREtnoSTRING;pnoSTRING;.BEGIN.SAVEPOINTdo_product_insert;INSERTINTOProductVALUES(pno,.);SAVEPOINTdo_transaction_insert;INSERTINTOTransactionVALUES(tno,.);ifsalesprice100ROLLBACK TOdo_transaction_insert;INSERTINTORecord(tno,pno,.);.COMMIT;EXCEPTIONWHENDUP_VAL_ON_INDEXTHENROLLBACK;.END;45黃三益2007資料庫的核心理論與實務第三版