2015年7月31日 星期五

交易處理(Transaction)介紹

說到交易處理,最常舉的例子就是銀行 金錢 提款



Round 1 【交易四大特性】 **********************************************

交易處理(Transaction)

【交易四大特性】
一、單元性(Atomicity)
二、一致性(Consistency)
三、隔離性(Isolation)
四、持久性(Durability)

1 單元性(Atomicity)
【定義】
將交易過程的所有對資料庫操作視為同一個單元工作,其中可能包括許
多步驟,這些步驟要嘛全部執行成功,否則,整個交易宣告失敗。所以,
整個交易是一個不可分割的邏輯單位。
但是,在單元工作中,如果其中有一個操作尚未完成,則整個交易必須
回到初始狀態,回到初始狀態的程序稱為復原(Recovery, Rollback) 。


2 一致性(Consistency)
【定義】
指交易過程所異動的資料在交易前與交易後必須一致,資料庫的資料必
須仍然滿足完整性限制條件(利用資料表中的Check與Foreign Key),即
維持資料的一致性


2.3 隔離性(Isolation)
【定義】隔離性是指多筆交易在同時交易時,雖然各交易是並行執行,
不過各交易之間應該滿足獨立性,也就是說,一個交易不會影響到其它
交易的執行結果,或被其它交易所干擾。

A交易處理某帳號時,B交易正好要讀取此帳號,當A交易處理失敗,
A交易Abort(撤回),形成B交易所讀取的資料是不正確的,也必須要被Abort(撤回)。

【分析】A交易資料更新到一半尚未完成確認(Commit)時,卻被B交易讀取,
因此,B交易只是取得A交易的暫時性資料,此現象就稱為Dirty Read。

【解決方法】利用鎖定(Lock)資料的方式來隔離交易。


4 持久性(Durability)
【定義】
永久性是指當交易完成執行確認交易(Commit)後,資料庫會保存交
易後的結果,即使系統掛了,交易的結果也不能遺失。




【兩種機制與ACID分析】
資料庫系統的交易管理是指「並行控制」和「回復技術」兩個機制的合
稱,因此,我們可以將兩種機制與ACID分析如下:
(1)「並行控制」機制是要維持「隔離性」和「一致性」保持
(2)「回復技術」機制是維持交易處理的「不可分割性」和「永久性」


Round 2 交易的狀態 **********************************************


交易的狀態
一個交易狀態是由活動狀態(Active)、部分確認(Partially Committed)、確
認(Committed)、失敗(Failed)及終止狀態(Terminated)等五個狀態組合而成。

1. 活動狀態(Active State)
【定義】
當「交易開始(Begin Transaction)」執行時即進入「活動狀態(Active
State)」,在此狀態中可以對資料庫進行一系列的讀(Read)及寫(Write)
動作。

2. 部分確認狀態
(Partially Committed State)
【定義】
指在對資料庫進行各種單元操作完成之後,也就是交易結束。此時即可
進入「部分確認狀態(Partially Committed State)」,在此狀態中「同
步控制」動作將會去檢查是否干擾其他正在執行中的交易。

3. 確認狀態(Committed State)
【定義】
當「活動狀態」與「部分確認狀態」檢查動作都成功之後,即可進入
「確認狀態(Committed State)」,亦即將交易過程真正的寫入資料庫
中,表示此筆交易成功。

4. 失敗狀態(Failed State)
【定義】
當「活動狀態」或「部分確認狀態」檢查動作其中一項失敗時,此時會
被要求進入「失敗狀態」,在此狀態中交易將會寫入「UNDO取消」動
作,以回復到交易未執行前的狀態。

5. 終止狀態(Terminated State)
【定義】
是指在「交易失敗」或「交易成功」之後,最後都必須執行交易終止,
亦即結束交易(End Transaction)。


若要結束交易功能的話,有兩種情況:

下達確認(Commit)或撤回(Rollback)指令這兩種情況才會使交易結束。因此,如果在交
易處理當中,若執行的操作有成功的話,可以使用確認(Committed)指令。執行確認指令
之後,交易功能的處理結果就會真正被反映出來。

如果在交易處理當中,若執行的操作失敗時,或想要重新再來一次的話,可以執行撤回
(Rollback)指令。執行撤回指令之後,原來的交易操作會變成無效,資料會回到原本執行
處理之前的狀態。



Round 3 交易的進行 **********************************************


交易的進行
【定義】
一個完整且成功的交易,必須要經過一連串的交易動作,因此,我們必
須要了解每一個交易動作的目的。如下所示:

1.BEGIN TRANSACTION(又可寫成BEGIN TRAN)

2.READ或WRITE

3.同步控制動作檢查

--對資料庫的各種操作完成之後,即可進入部分確認狀態,並且準備進入Commit
--同步控制動作將檢查其是否干擾其他正在執行中的交易


4.COMMIT TRANSACTION
(又可寫成COMMIT TRAN、COMMIT或COMMIT WORK)

--【定義】對資料庫的各種操作完成之後,即可進入部分確認狀態,並且準備進入Commit

--如果交易執行過程沒有錯誤,下達COMMIT指令,將交易更改的資料實際寫入資料庫

5.ROLLBACK TRANSACTION
(又可寫成ROLLBACK TRAN, ROLLBACK 或ROLLBACK WORK)

--【定義】回復交易(Rollback):如果交易執行過程有錯誤,就是下達ROLLBACK指令放棄交易,並將資料庫回復到交易前狀態
--如果交易失敗,回復交易是使用ROLLBACK TRAN指令結束。

6.UNDO
--【定義】與ROLL BACK動作相似,但是只會被用來回復到未進行單一動作前的
狀態,而不是整個交易。

7.REDO
--【定義】這是要重複執行某一交易中的動作,以確定所有已被確認的交易動作已
經成功的作用在資料庫中。




Ex 1 ================================

BEGIN TRAN
INSERT 學生資料表VALUES('S001', '張三')

IF @@ERROR<>0 --同步控制動作檢查
  ROLLBACK TRAN --確認交易(Commit)
ELSE
  COMMIT TRAN        --回復交易(Rollback)
END TRAN


Ex 2 ================================

Begin Transaction --開始交易
SQL命令1
SQL命令2
……
SQL命令N

if (產生錯誤) --進行ROLLBACK的動作
Rollback transaction
else
Commit transaction --交易成功
End Transaction --結束交易

================================


**********************************************

此篇為筆記,資料來源 洪瑞展老師。


沒有留言:

張貼留言