Download presentation
Presentation is loading. Please wait.
1
課程名稱:資料庫系統 授課老師:李春雄 博士
第 十一 章 並行控制 課程名稱:資料庫系統 授課老師:李春雄 博士
2
本章學習目標 1.讓讀者瞭解並行控制的處理方式之相關技術。 2.讓讀者瞭解並行控制中的「鎖定法(Locking) 」 理論與實作
3
本章內容 11-1 並行控制的技術 11-2 排程(Schedule) 11-3 鎖定法(Locking) 11-4 資料庫的鎖定層級
11-5 資料庫的鎖定模式 11-6 死結(Deadlock) 11-7 死結的處理 11-8 時間戳記法 11-9 樂觀並行控制法
4
11-1 並行控制的技術 在第十章(ch10-6)章節中,己經介紹在多個交易中,如果同時存取一項資料時,可能會產生四個嚴重問題:
11-1 並行控制的技術 在第十章(ch10-6)章節中,己經介紹在多個交易中,如果同時存取一項資料時,可能會產生四個嚴重問題: 1.遺失更新的問題(Lost Update) 2.未確認相依的問題(Uncommitted dependency problem;Dirty Read) 3.不一致分析的問題(Inconsistent Analysis problem) 4.無法重複的讀取(Nonrepeatable read) 【定義】 並行控制主要是用來控制多個交易在同時間存取同一個資料項目時, 不會產生互相干擾,以致於產生不一致的情況。
5
因此,在本章節中,將介紹並行控制的處理方式之相關技術。
目前常見的方法有: 1.排程法(Schedule) 2.鎖定法(Locking):它是利用廣被使用的一種並行控制的技術。 3.兩階段鎖定法(Two-Phase Locking;2PL) 4.時間戳記法(Time-Stamp Order) 5.樂觀控制法(Optimistic Control)
6
11-2 排程(Schedule) 【定義】 排程(Schedule)就是不同交易動作所構成的執行順序,主要是針對讀取(Read)和寫入(Write)資料庫單元操作的執行順序。 【目的】解決並行控制的問題。 【假設】 排程S是T1、T2、..., Tn 這n個不同交易動作所構成的執行順序,這些交易需遵照以下限制: 1. 對於排程S中的每一個交易Ti 而言,交易Ti 運算動作的順序必須與它 們出現在排程S中的順序一樣。 2. 不過來自其他交易Tj 的動作,可以與排程S中交易Ti 的動作交錯執行。
7
【例如】 假設有兩個交易T1與交易T2,如下所示: 交易時間點(T) 交易1 交易2 T1 Read X T2 X=X+2 T3
【例如】 假設有兩個交易T1與交易T2,如下所示: 交易時間點(T) 交易1 交易2 T1 Read X T2 X=X+2 T3 Write X T4 Read Y T5 Y=Y-1 T6 Write Y
8
11-2.1 循序性排程(Serial Schedules)
【定義】 是指循序地一個交易緊接著另一個交易來執行。而此種交易的特性就是資料庫中的單元操作之執行順序不會「交錯」的被執行。否則便稱為「非循序性排程」。如下表所示: 交易時間點(T) 交易1 交易2 T1 Read X T2 X=X+2 T3 Write X T4 Read Y T5 Y=Y-1 T6 Write Y T7 T8 X=X-5 T9
9
11-2.2 非循序性排程 (Non-Serial Schedules)
【定義】 是指在排程多個交易的資料庫單元操作能夠交錯(Interleaving)執行的排程,又稱為交錯執行排程(Interleaved Schedules )。如下表所示: 如果「交錯執行的排程」與「循序性排程」的執行結果相同,我們就可以稱此兩個排程為「等價關係(Equivalent)」,並且也可以稱此交錯執行的排程滿足「可循序性」(Serializable)。 交易時間點(T) 交易1 交易2 T1 Read X T2 X=X+2 T3 T4 Write X X=X-5 T5 Read Y T6 T7 Y=Y-1 T8 T9 Write Y
10
11-3鎖定法(Locking) 【定義】 鎖定法(Locking)是並行控制最常見的處理方法,當交易A執行讀取(Read)或寫入(Write)資料庫單元操作時,會先將資料鎖定(Lock),此時,若交易B同時存取相同資料,因為資料已經被鎖定,所以交易B需要等待,直到交易A解除資料鎖定(Unlock)。 【目的】確保交易和資料的邏輯完整性。 在SQL Server資料庫管理系統中,使用「鎖定」物件來防止多個使用者同時對資料庫作修改,並防止使用者讀取被其他使用者變更的資料。鎖定有助於確保交易與資料的邏輯完整性。
11
【實例】 假設有A,B兩位學生同時進行選同一門課程時,而A同學在第一時間先將第一筆課程代碼C0001給LOCK(步驟1),因此,B同學要選取課程代碼C0001這門課程時,就會顯示「等待中…」,所以B同學的查詢動作(步驟2)是無效的,因此,必須要等到,A同學將對課程代碼C0001這門課程解除鎖定(UnLock)時(步驟3),此時B同學才能再進行Lock(步驟4),就可以再進行選修此課程。
12
由上面的學生選課的例子中,我們可以了解當有學生正在選修某一門課程時,DBMS會將此門課程加以鎖定,其他同學都不能存取,此作法可以確保該筆資料在被存取時,是一個循序性排程,以確保資料的正確性,而不會同時被讀取又被寫入,以導致不一致的問題發生。
13
【實作1】 使用鎖定法(Locking)的情況
【解答】檔案名稱:ch11-3(交易1).sql 與 ch11-3(交易2).sql 【說明】 使用鎖定法(Locking)的情況之下,交易1在進行選課時,交易2是無法進行查詢選課記錄。如此可以確保資料的一致性與完整性。 交易T1 交易T2 use ch11_DB SET TRANSACTION ISOLATION LEVEL READ COMMITTED;--Default 交易 Begin Transaction --選課先查詢 select * from dbo.選課資料表 --選課作業 IF (select 已選人數 from dbo.選課資料表 Where 課號='C005')<50 Begin UPdate dbo.選課資料表 set 已選人數=已選人數+1 Where 課號='C005' end 交易 --請執行「ch11-3(交易2).sql」 Rollback Transaction --選課後查詢 /* 無法完成.等待中...... */
14
【實作2】沒有使用鎖定法(Locking)的情況
【解答】檔案名稱:11-3A(交易1).sql 與 A(交易2).sql 【說明】 在沒有使用鎖定法(Locking)的情況之下,交易1在進行選課時,交易2也可以進行查詢選課記錄,將導致交易2讀取交易1在尚未執行確認之前的結果。 交易T1 交易T2 use ch11_DBMS SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 交易 Begin Transaction --選課先查詢 select * from dbo.選課資料表 --選課作業 IF (select 已選人數 from dbo.選課資料表 Where 課號='C005')<50 Begin UPdate dbo.選課資料表 set 已選人數=已選人數+1 Where 課號='C005' end 交易 --請執行「11-3(交易2).sql」 Rollback Transaction --選課後查詢 use ch11_DB /* 造成交易2讀取交易1在尚未執行確認之前的結果。*/
15
11-4 資料庫的鎖定層級 【定義】 在一個資訊系統中,如果有多個交易同時存取同一個資料項目時,則必須要使用「並行控制」的技術,而在多種的技術中,以鎖定法(Locking)是最常用的方法。因此,在使用鎖定法時,則必須要考量資料鎖定之層級。基本上,在大多數的DBMS中都提供以下五種資料鎖定層級。 1.資料庫層級 2.資料表層級 3.儲存區段或儲存頁面層級(Page Lock) 4.記錄層級 5.欄位層級
16
1.資料庫層級 【定義】是指鎖定整個資料庫系統,全部使用者無法進行存取動作。 【使用時機】備份整個資料庫。 鎖定資料庫
17
2.資料表層級 【定義】是指鎖定資料庫中的某一資料表。 【使用時機】更新某一表單資料時。 【例如】調整全班同學的成績資料。 鎖定資料表
18
3.儲存區段或儲存頁面層級 【定義】是指鎖定實際儲存區段或頁面,一次鎖定一個資料頁 (也有可能好幾筆記錄) 【使用時機】實務上最常被使用。
3.儲存區段或儲存頁面層級 【定義】是指鎖定實際儲存區段或頁面,一次鎖定一個資料頁 (也有可能好幾筆記錄) 【使用時機】實務上最常被使用。 鎖定儲存區段
19
4.記錄層級 【定義】是指鎖定資料表中指定的某些記錄, 而未被鎖定的記錄, 其他使用者仍可以進行存取動作。 【使用時機】一次只所定一筆記錄
4.記錄層級 【定義】是指鎖定資料表中指定的某些記錄, 而未被鎖定的記錄, 其他使用者仍可以進行存取動作。 【使用時機】一次只所定一筆記錄 鎖定記錄
20
5.欄位層級 【定義】是指鎖定資料列中指定的欄位,而未被鎖定的欄位,其他 使用者仍可以進行存取動作。 【使用時機】更新少數欄位資料時。
5.欄位層級 【定義】是指鎖定資料列中指定的欄位,而未被鎖定的欄位,其他 使用者仍可以進行存取動作。 【使用時機】更新少數欄位資料時。 鎖定欄位
21
表11-1鎖定資料層級 在上表中,當鎖定資料層級越高時,則「並行性」就越低。例如,當我們要備份資料庫時,則必須要鎖定整個資料庫系統,因此,將使得全部的使用者無法順利的存取資料。不過由於使用者都無法上線存取資料,系統消耗也會下降。 鎖定資料層級 鎖定資源 資料庫層級 鎖定整個資料庫系統 資料表層級 鎖定資料庫中的某一資料表 區段或頁面層級 鎖定實際儲存區段或頁面 記錄層級 鎖定資料表中指定的某些記錄 欄位層級 鎖定資料列中指定的欄位
22
11-5 資料庫的鎖定模式 【定義】 在資料庫的鎖定模式中,基本上,可以分為以下三種模式: 1. 二元鎖定(Binary Locking)
11-5 資料庫的鎖定模式 【定義】 在資料庫的鎖定模式中,基本上,可以分為以下三種模式: 1. 二元鎖定(Binary Locking) 2. 共享/互斥鎖定(Shared and Exclusive Locking) 3. 兩階段鎖定 (Two Phase Locking)
23
11-5.1 二元鎖定(Binary Locks) 【定義】
是指資料庫中的某一資料項的鎖定狀態有兩種狀態,第一種是『鎖定』,第二種則為『解除鎖定』。因此,當交易要存取某一資料項時,則此資料項就會被設定為『鎖定』狀態,直到交易存取完畢之後,才能再將此資料項設定成「解除鎖定」。 也就是說,交易中的資源在同一個時間只能提供一個交易來進行存取。
24
基本上,二元鎖定的操作模式,可分為以下兩種操作方式: Lock(X):是指將資料項X鎖定設定為『鎖定』狀態。 其演算法如下:
【操作模式】 基本上,二元鎖定的操作模式,可分為以下兩種操作方式: Lock(X):是指將資料項X鎖定設定為『鎖定』狀態。 其演算法如下: Lock(X)演算法 Begin Transaction 開始交易 If Lock(X) =0 Then 判斷資料項是否「未鎖定」狀態 Lock(X)= 設定資料項X鎖定為『鎖定』狀態 Else 否則就是已被「鎖定」狀態 Do While Lock(X) = 等待資料項X被「解除鎖定」 Lock(X)= 設定資料項X鎖定為『鎖定』狀態 Loop End If End Transaction 結束交易
25
2.UnLock(X):是指將已被鎖定的資料項X,再轉為『非鎖定』狀態, 亦即解除資料項X的『鎖定』狀態。
Begin Transaction 開始交易 If Lock(X) =1 Then 判斷資料項是否「鎖定」狀態 Lock(X)= 設定資料項X鎖定為『非鎖定』狀態 Else 否則就是已被「鎖定」狀態 Do While Lock(X) = 等待資料項X被「鎖定」 Lock(X)= 設定資料項X鎖定為『非鎖定』狀態 Loop End If End Transaction 結束交易
26
【遵循的規則】 1.在交易進行中,執行讀取Read(X)操作或寫入Write(X)操作之前,必須先執行 鎖定操作Lock(X)。
Lock(X) 動作。例如在下表中,t1時間Lock(X)並且又在t3時間Lock(X), 所以,產生操作失敗。 3. 在交易進行中,只能對已被鎖定的資料項X,執行解除鎖定指令 UnLock(X) 。 4.在交易進行中,執行全部讀取Read(X)操作和寫入Write(X)操作之 後,必須要執行解除鎖定指令UnLock(X)。
27
11-5.2共享/互斥鎖定 (Shared and Exclusive Locking)
【定義】由於二元鎖定(Binary Locks) 應遵循的規則比較嚴格。因此,此種作法對於並行處理程度不佳,也就是同一個時間無法提供多個使用者存取同一個資料項。但是,在事實上,如果有多筆交易同時存取某一個資料項目,並且只是執行讀取 (Read)動作時,則我們沒有必要將此資料項執行完全鎖定狀態。因此,我們就作法:就是當只有在執行寫入 (Write) 動作時,才需要將此資料項鎖定即可。
28
【策略】 將二元鎖定(Binary Locks)中的鎖定狀態分為兩個,分別為:
1.共享鎖定(Shared Lock):也稱為「讀取鎖定」(Read Lock) 2.互斥鎖定(Exclusive Lock):也稱為「寫入鎖定」(Write Lock)
29
一. 共享鎖定(Shared Lock) 【定義】也稱為「讀取鎖定」(Read Lock)
對於正在被操作中的資料,別人可以參照它,但是不能對它加以變更。 【例如】 當使用者1正在操作資料庫中的某一資料項時,則使用者2可以對此資料項進行讀取(即參照),但是使用者3就無法對此資料項進行變更。如下圖所示: 正在操作 資料庫 使用者1 使用者2 使用者3 可以讀取 無法變更
30
【特性】 1.通常用在讀取資料時,該筆資料就被設成共享(用)鎖定,其他人亦 可讀取該資料但無法更改。 2.被設定成共享(用)鎖定的資料若未經解鎖(Unlock),則無法再被設成 獨占鎖定。這也就是被共享(用)鎖定的資料只供「讀取」而無法「修改」的原因。
31
二. 互斥鎖定(Exclusive Lock)
【定義】也稱為「寫入鎖定」(Write Lock) 讓別人無法去參照或操作正被操作中的資料。 【例如】 當使用者1正在操作資料庫中的某一資料項時,則使用者2是無法讀取此資料項的,並且使用者3也無法對此資料項進行變更。如下圖所示: 正在操作 資料庫 使用者1 使用者2 使用者3 無法讀取 無法變更
32
【特性】 1.通常發生在「更改」資料時,系統就會將該筆資料設成「互斥鎖定」 ,這時其它交易就無法讀取該資料,當然也就無法更改了。 2.如果某一交易以「互斥鎖定」方式封鎖某資源,則只有該交易被允許 更新該資源的資料,直到該交易解除鎖定(Unlock)該資源。
33
共享與互斥鎖定之關係表 T2交易 T1交易 共享鎖定(Shared Lock) 或 讀取鎖定(Read Lock)
共享與互斥鎖定之關係表 T2交易 T1交易 共享鎖定(Shared Lock) 或 讀取鎖定(Read Lock) 互斥鎖定(Exclusive Lock) 寫入鎖定(Write Locks) 可以(共享) 不可以(互斥)
34
【共享/互斥鎖定的缺點】 1.不能保証排程為可序列化 2.可能會產生死結(Deadlock)
【共享/互斥鎖定的缺點】 1.不能保証排程為可序列化 2.可能會產生死結(Deadlock) 3.可能會產生餓死(Starvation)狀態
35
11-5.3 兩階段鎖定法 (Two-Phase Locking;2PL)
【定義】 由於利用鎖定法可能會發生「死結」,因此其改良為「兩階段鎖定法(2PL)」。而所謂的「兩階段鎖定法 ( Two-Phase Locking )」分為兩個階段來實施鎖定 ( Lock ) 與解除鎖定 ( Unlock ) 。一個交易開始執行時,便先將它所有需要存取的資料先加以鎖定,此為第一階段;執行完畢後便將所有被它鎖定過的資料解除鎖定,此為第二階段。其兩個階段如下所示: 1.第一階段:就是鎖定階段 2.第二階段:就是解除鎖定階段
36
1.第一階段:就是鎖定階段 也就是所謂的「擴展階段(Expanding Phase)」或稱為「成長階段 (Growing Phase)」。 在此階段中,允許加入新的鎖定或升級動作,但不允許解除任何鎖定。 2.第二階段:就是解除鎖定階段 也就是所謂的「縮減階段(Shrinking Phase)。 在此階段中,允許解除現存鎖定或降級動作,但不允許加入任何新的 鎖定。
37
舉例一: 現在有一個交易T1,時間由t1~t8,實際交易過程如下所示: 說明:
舉例一: 現在有一個交易T1,時間由t1~t8,實際交易過程如下所示: 說明: 交易T1在時間t1到t3時是成長階段(read-lockwrite-lock) ,在時間t4時解除交易T1的鎖定,並且在時間t5時沒有加入新的鎖定,所以是收縮階段。因此,本交易T1符合2PL。
38
舉例二: 現在有一個交易T1,時間由t1~t9,實際交易過程如下所示: 說明:
舉例二: 現在有一個交易T1,時間由t1~t9,實際交易過程如下所示: 說明: 交易T1在時間t1到t3時是成長階段(read-lockwrite-lock),在時間t4時解除交易T1的鎖定,並且在時間t5時又加入新的鎖定,不被允許。因此,本交易T1不符合2PL。
39
【兩階段鎖定方法的優缺點】 【優點】可以保證排程是可序列化的。 【缺點】限制並行的程度,可能會產生死結(Deadlock)與餓死
(Starvation)現象。
40
11-6 死結(Deadlock) 【定義】 是指因為多個交易同時要求某筆資料或資源時,彼此之間相互鎖定對方
需要的資料,以至交易被卡死,導致多個交易都無法繼續執行的情況。 【例如】遺失更新問題就一定會產生死結。 假設現在有T1與T2兩個交易,同時被執行時,如果交易T1把表格R1鎖住,而交易T2把表格R2鎖住。在這種情況之下,假設現在交易T1在把表格R1鎖住的情況下,嘗試要去存取表格R2的資料。而交易T2在把表格R2鎖住的情況下,嘗試要去存取表格R1的資料。
41
【說明】 簡單來說,當兩條連線互等對方所握住的資源時,發生死結。 1.交易T1握住R1資源並等待R2資源。而交易T2 握住R2資源並等待R1 資源. 2.此時,交易T1陷入等待,等待交易T2解鎖R2資源,同時交易T2亦 陷入等待,等待交易T1解鎖R1資源 3.因此,交易T1與交易T2兩條連線互等對方,沒有一條可以執行。
42
【實作】 假設現在有T1與T2兩個交易,同時被執行時,如果交易T1把「甲班報名人數表」鎖住,而交易T2把「乙班報名人數表」鎖住。在這種情況之下,假設現在交易T1在把「甲班報名人數表」鎖住的情況下,嘗試要去存取「乙班報名人數表」的資料。而交易T2在把「乙班報名人數表」鎖住的情況下,嘗試要去存取「甲班報名人數表」的資料。此時,就會產生死結的現象。
43
【解答】檔案名稱:ch11-6(交易1).sql 與 ch11-6 (交易2).sql
【說明】這麼一來,交易T1在表格R2的鎖定被解除之前,一直都會處於待機的狀態,而交易T2則也會在表格R1的鎖定被解除之前,一直處於等待的情況。像這樣子,變成雙方都會進入永久等待狀態的現象,被稱為死結(Deadlock)。 交易T1 交易T2 use ch11_DB SET TRANSACTION ISOLATION LEVEL READ COMMITTED;--適用READ_ONLY 交易 ==>step1 Begin Transaction select * from dbo.甲班報名人數表 --寫入 UPdate dbo.甲班報名人數表 set 人數=人數+1 交易 --請執行「ch11-6(交易2).sql」==>step1 交易 ==>step2 int=0 int=0 int=0 from dbo.乙班報名人數表 set print '甲、乙兩班總報名人數=' + 交易 --請執行「ch11-6(交易2).sql」==>step2 交易 ==>step1 UPdate dbo.乙班報名人數表 交易 --請執行「ch11-6(交易1).sql」==>step2 交易 ==>step2
44
11-7 死結的處理 由上一單元中,我們已經了解多個交易同時要求某筆資料或資源時,往往會產生死結的情況。因此,在本單元中,將介紹死結的處理方法。基本上,它有以下三種方法。 【方法】 1.死結預防(Deadlock Prevention) 2.死結偵測(Deadlock Detection) 3. 死結避免(Deadlock Avoidance)
45
1.死結預防(Deadlock Prevention)
【定義】 指在執行交易之前必須要先檢查多執行緒的所有狀態,以確認是否會 導致死結。
46
2.死結偵測(Deadlock Detection)
【定義】 在資料庫管理系統中,每間隔某一段時間定期檢查等待狀態的交易, 是否產生死結情況,如果發現有的話,就必須要強迫交易回復交易(Rollback)後重新開始。
47
3. 死結避免(Deadlock Avoidance)
【定義】 在資料庫管理系統中,有三種避免死結的並行控制處理方法。 (1) 兩階段鎖定法(Two-Phase Locking;2PL) (2) 時間戳記法(Time-Stamp Order) (3) 樂觀並行控制法(Optimistic Control) 以上三種避免死結的並行控制處理方法,在後面章節會詳細說明。
48
11-8時間戳記法(Time-Stamp Order)
它是一種避免死結的並行控制處理方法。每一種RDBMS都必須提供一些機制以處理死結問題,制定交易的優先序,利用所謂的時間戳記法(Time-Stamp Order)。 【定義】它是指並行控制的多個交易,依其執行先後順序,賦予一個時間戳記,一旦有異動想要存取某一資料,則要先將該資料蓋上戳記(Time Stamp)。於是欲存取該資料的異動則要依戳記上的時間先後依序執行。 【兩種方法】 交易時間戳記一般有兩種方法來取得識別碼: 第一種是利用計數器(counter)產生流水號碼給各交易。 第二種就是利用讀取系統時間來當作各交易識別碼。
49
11-9 樂觀並行控制法 (Optimistic Control)
【定義】它是一種避免死結的並行控制處理方法。 是指各交易的資料庫單元操作都百分之一百可以順利執行,直到交易確認(Committed)之後,DBMS才檢查是否造成資料庫的不一致,如果有,交易就回復交易(Rollback)。 【適用時機】當「讀取(Read)」頻率高的交易情況 【作法】交易前先不鎖定,交易後再鎖定檢查 【優點】可以提高資料共享程度 【缺點】交易前先不鎖定,若有資料被異動時,則產生交易失敗
50
【舉例1】樂觀並行控制法(交易成功) 假設現在有三個交易,分別為交易T1、T2及T3,其中交易T1與T2只有查詢(讀取)某一項資料,而沒有進行資料的異動情況,而交易T3則進行更新某一項資料,此時,利用樂觀並行控制法,則會成功。
51
【實作1】樂觀並行控制法(交易成功) 假設現在有兩位同學要使用選課系統,分別使用交易T1及T2其中第一位同學的選課操作(交易)T1在查詢(讀取)某一項資料,而沒有進行資料的異動情況,而第二位同學的選課操作(交易)T2進行更新某一項資料,此時,利用樂觀並行控制法,則會成功。
52
【解答】檔案名稱:ch11-9(交易1).sql 與 ch11-9(交易2).sql
說明:交易T1查詢選課記錄。因此,在未鎖定的情況之下,並沒有任何的異動產生, 因此,交易T2可以在事先未鎖定的情況下,進行選課作業。 交易T1 交易T2 use ch11_DB SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 交易 Begin Transaction --選課查詢 select * from dbo.選課資料表 交易 --請執行「ch11-9(交易2).sql」 --選課先查詢 --選課作業 IF (select 已選人數 from dbo.選課資料表 Where 課號='C005')<50 Begin UPdate dbo.選課資料表 set 已選人數=已選人數+1 Where 課號='C005' end
53
【實作2】樂觀並行控制法(交易失敗) 假設現在有兩位同學要使用選課系統,分別使用交易T1及T2,其中第一位同學皆進行選課操作(交易) T1,亦即進行更新某一項資料,而第二位同學則只是查詢操作(交易)T2,此時,利用樂觀並行控制法,則會失敗。
54
【解答】檔案名稱:ch11-9A(交易1).sql 與 ch11-9A(交易2).sql
說明:交易T1、T2皆可以同時進行選課作。因此,在未鎖定的情況之下,就會產生異動情況,因此,必須要進行鎖定,並且查檢該資料是否被異動過(已選課人數),如果有,則交易失敗。 交易T1 交易T2 use ch11_DB SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 交易 ==STEP1 Begin Transaction --選課先查詢 select * from dbo.選課資料表 --選課作業 IF (select 已選人數 from dbo.選課資料表 Where 課號='C005')<50 Begin UPdate dbo.選課資料表 set 已選人數=已選人數+1 Where 課號='C005' end 交易 --請執行「ch11-9A(交易2).sql」 --假設「資料庫系統」的已選人數為人 ==STEP2 IF (select 已選人數 from dbo.選課資料表 Where 課號='C005')<>45 ROLLBACK TRAN --未鎖定下,資料有異動,則交易失敗 --假設「資料庫系統」未異動前,已選人數為45人 --如果不是45人,則 --請執行「11-9A(交易1).sql」==STEP2
Similar presentations