ch14. 交易處理 交易 (transaction) 概念介紹 多人系統下的交易的並行控制...

58
1 Ch14. Ch14. 交交交交 交交交交 交交 交交 (Transaction) (Transaction) 交交交交 交交交交 交交交交交交交交交交交交交 交交交交交交交交交交交交交 交交交交交交交交交 交交交交交交交交交 Ch15. Ch15. 交交交交交交交交交 交交交交交交交交交 交交交交交交 交交交交交交 / / 交交 交交 交交 交交 / / 交交交交 交交交交 交交交交交交交交 交交交交交交交交 Ch16.SQL Server Ch16.SQL Server 交交交交交交交 交交交交交交交 SQL Server SQL Server 交交交交交 交交交交交 交交交交交交交交交交交 交交交交交交交交交交交 交交交交交交交交交 交交交交交交交交交 第第第 第第第第第第第第第

Upload: leonard-townsend

Post on 30-Dec-2015

86 views

Category:

Documents


0 download

DESCRIPTION

第五篇. 系統管理與資料安全. Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離 / 附加介紹 資料的匯出與匯入 Ch16.SQL Server 登入與系統安全 SQL Server 的登入驗證 伺服器角色與資料庫角色 存取權限的策略制定. 第十四章. 交易處理 (Transaction Processing). Chapter 14 Outline. 14-1 交易概念介紹 14-2 錯誤回復 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

11

Ch14.Ch14. 交易處理 交易處理 交易交易 (Transaction)(Transaction) 概念介紹概念介紹 多人系統下的交易的並行控制多人系統下的交易的並行控制 錯誤與例外處理機制錯誤與例外處理機制Ch15.Ch15. 資料庫的備份與還原資料庫的備份與還原 資料庫的備份資料庫的備份 // 還原、卸離還原、卸離 // 附加介紹附加介紹 資料的匯出與匯入資料的匯出與匯入Ch16.SQL ServerCh16.SQL Server 登入與系統安全登入與系統安全 SQL ServerSQL Server 的登入驗證的登入驗證 伺服器角色與資料庫角色伺服器角色與資料庫角色 存取權限的策略制定存取權限的策略制定

第五篇 系統管理與資料安全

Page 2: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

22

交易處理交易處理 (Transaction (Transaction Processing)Processing)

第十四章第十四章

Page 3: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

33

Chapter 14 OutlineChapter 14 Outline14-1 14-1 交易概念介紹 交易概念介紹 14-2 14-2 錯誤回復 錯誤回復 14-3 14-3 交易的並行控制 交易的並行控制 14-4 14-4 SQL ServerSQL Server 中交易與記錄檔 中交易與記錄檔 14-5 14-5 與交易有關的與交易有關的 SQLSQL 敘述 敘述 14-6 14-6 建立一交易 建立一交易 14-7 14-7 SQL Server SQL Server 的的 33 種交易類型種交易類型 14-8 14-8 巢狀式交易巢狀式交易 14-9 14-9 分散式交易分散式交易 14-1014-10 選擇交易隔離層級選擇交易隔離層級 14-1114-11 鎖定與死結鎖定與死結 14-1214-12 本章總結本章總結

Page 4: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

44

14-1 14-1 交易概念介紹交易概念介紹在資料庫系統中,交易在資料庫系統中,交易 (Transaction)(Transaction) 概概念提供了一個資料處理的邏輯單元念提供了一個資料處理的邏輯單元 (Logic (Logic Unit) Unit) 。。 在該邏輯單元中如果在該邏輯單元中如果全部執行成功全部執行成功,則會,則會確定確定交易期間所修改的所有資料正式成為資料庫的交易期間所修改的所有資料正式成為資料庫的內容;如果內容;如果有發生錯誤有發生錯誤,則必須,則必須取消或回復取消或回復該該交易期間內所有的資料修改。 交易期間內所有的資料修改。

資料庫系統是一個交易處理系統資料庫系統是一個交易處理系統 (Transact(Transaction Processing System)ion Processing System) ,它容許交易同,它容許交易同步的被執行。 步的被執行。

Page 5: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

55

14-1 14-1 交易概念介紹交易概念介紹多使用者系統(多使用者系統( Multiuser SystemMultiuser System )) 現今多數現今多數 DBMSDBMS 為多使用者系統,即同時容許為多使用者系統,即同時容許一個以上使用者存取資料庫。這是因為一個以上使用者存取資料庫。這是因為 DBMSDBMS安裝在多元程式(安裝在多元程式( multiprogrammingmultiprogramming )的作業)的作業系統上,這些作業系統可以同時存取執行一個系統上,這些作業系統可以同時存取執行一個以上的處理程序以交錯(以上的處理程序以交錯( interleavedinterleaved )方式分)方式分享享 CPUCPU 的使用權。的使用權。

Page 6: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

66

14-1 14-1 交易概念介紹交易概念介紹 如下圖所示,有兩個處理程序如下圖所示,有兩個處理程序 PPii和和 PPjj以以交錯方式被交錯方式被 CPUCPU 執行。在時間執行。在時間 t1t1 ,, PPii被被 CPUCPU 執行。當執行。當 PPii需要資料庫資料,需要資料庫資料,而這些資料不在主記載體時,而這些資料不在主記載體時, DBMSDBMS 必必須呼叫作業系統,處理此須呼叫作業系統,處理此 I/OI/O 要求。要求。

Page 7: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

77

14-1 14-1 交易概念介紹交易概念介紹 這時這時 CPUCPU 會中斷會中斷 PPii的執行,再呼叫檔案系統的執行,再呼叫檔案系統及磁碟管理系統的服務將資料讀取到主記載體。及磁碟管理系統的服務將資料讀取到主記載體。在此等待的時間中,為了提高在此等待的時間中,為了提高 CPUCPU 之使用率之使用率以及系統整體效能(以及系統整體效能( throughputthroughput ),), CPUCPU 會會執行其他處理程序,在本例中執行其他處理程序,在本例中 PPjj會被會被 CPUCPU 的的排班程式(排班程式( schedulerscheduler )選出而被執行,如上)選出而被執行,如上頁圖之時間頁圖之時間 t2t2 所示。所示。

假如當假如當 PPii之之 I/OI/O 完成後(時間完成後(時間 t3t3 ),經過排班),經過排班程式的選擇,程式的選擇, PPii會重新拿到會重新拿到 CPUCPU 的使用權。的使用權。處理程序處理程序 PPii和和 PPjj以交錯方式執行其他部份,以交錯方式執行其他部份,直到結束為止。當然,一個處理程序的直到結束為止。當然,一個處理程序的 CPUCPU使用時間片斷(使用時間片斷( time slicetime slice )用完也會發生被)用完也會發生被置換(置換( swapswap )的情況。)的情況。

Page 8: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

88

14-1 14-1 交易概念介紹交易概念介紹為何交易會與多使用者系統有關係,因為大為何交易會與多使用者系統有關係,因為大多數的資料庫理論是在交錯同步多數的資料庫理論是在交錯同步 (Interleaved (Interleaved Concurrency)Concurrency) 的假設下發展出來的。由於系的假設下發展出來的。由於系統在同一時間可能會執行多的統在同一時間可能會執行多的 processprocess ,因,因此如何此如何保證資料讀取、寫入的正確性保證資料讀取、寫入的正確性就是交就是交易探討的重要課題。易探討的重要課題。

Page 9: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

99

14-1 14-1 交易概念介紹交易概念介紹交易的特性(交易的特性( Properties of TransactionProperties of Transaction )) 單元性(單元性( AtomicityAtomicity ))

• 一個交易是一個單元(一個交易是一個單元( AtomicAtomic )的處理。如果是正)的處理。如果是正常情況,則整個交易應完整的被執行。否則,發生常情況,則整個交易應完整的被執行。否則,發生任一錯誤情況時,則將交易所做的資料更新復原到任一錯誤情況時,則將交易所做的資料更新復原到交易開始前狀況(交易開始前狀況( undoundo )。)。因此,單元性也稱之因此,單元性也稱之為不可部份完成性。 為不可部份完成性。

一致性(一致性( Consistency Consistency )) • 一個完整的交易能使資料庫從一個一致性狀態(一個完整的交易能使資料庫從一個一致性狀態( coco

nsistent statensistent state )轉換到另一個一致性狀態。所謂一)轉換到另一個一致性狀態。所謂一致性狀態是指資料庫的資料滿足資料庫綱要所定義致性狀態是指資料庫的資料滿足資料庫綱要所定義的所有限制,例如整合限制條件。的所有限制,例如整合限制條件。

Page 10: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1010

14-1 14-1 交易概念介紹交易概念介紹 隔離性(隔離性( IsolationIsolation ))

• 一個執行中的交易不應被其他同步執行中的交易所一個執行中的交易不應被其他同步執行中的交易所影響,即交易間應具有隔離機制。 影響,即交易間應具有隔離機制。

耐久性耐久性(( DurabilityDurability ))• 一個交易成功的執行「認可」(一個交易成功的執行「認可」( commitcommit )命令後,)命令後,它對資料庫所作的任何資料更新處理,均反應在資它對資料庫所作的任何資料更新處理,均反應在資料庫中。這些更新動作不會受「認可」後的任何錯料庫中。這些更新動作不會受「認可」後的任何錯誤所影響。 誤所影響。

Page 11: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1111

14-1 14-1 交易概念介紹交易概念介紹交易管理在交易管理在 DBMSDBMS 是由是由錯誤回復錯誤回復 (Failure Re(Failure Recovery)covery) 和和並行控制並行控制 (Concurrency Contro(Concurrency Control)l) 兩個主要機制來達成 。而交易管理的主兩個主要機制來達成 。而交易管理的主要目的是要維持資料庫中資料的要目的是要維持資料庫中資料的一致性一致性 (Con(Consistency)sistency) 和和正確性正確性 (Correctness)(Correctness) 。 。 錯誤回復機制是維持交易處理的「單元性」和錯誤回復機制是維持交易處理的「單元性」和「耐久性」 「耐久性」

並行控制機制是在維持「隔離性」和「一致性」 並行控制機制是在維持「隔離性」和「一致性」

Page 12: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1212

14-2 14-2 錯誤回復 錯誤回復 當一個交易提交到當一個交易提交到 DBMSDBMS 要被執行時,要被執行時, DBMSDBMS的責任是要管理此交易順利的執行,包括的責任是要管理此交易順利的執行,包括下列的情況: 下列的情況: 當交易成功的執行「認可」當交易成功的執行「認可」 (Commit)(Commit) 後,此交後,此交易對資料庫所作的資料更新需反應到資料庫中。易對資料庫所作的資料更新需反應到資料庫中。

在交易執行當中不會被其他交易影響。 在交易執行當中不會被其他交易影響。 當錯誤發生時,交易的操作不會對資料庫產生當錯誤發生時,交易的操作不會對資料庫產生影響。 影響。

Page 13: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1313

14-2 14-2 錯誤回復錯誤回復錯誤種類(錯誤種類( Types of FailuresTypes of Failures ):一般可):一般可分為分為 33 大類,交易錯誤、系統錯誤以及儲大類,交易錯誤、系統錯誤以及儲存媒體錯誤存媒體錯誤 交易錯誤(交易錯誤( Transaction FailuresTransaction Failures ))

• 邏輯錯誤(邏輯錯誤( Logical ErrorLogical Error ) ) • 資料錯誤(資料錯誤( Data ErrorData Error ) ) • 同步控制強制錯誤(同步控制強制錯誤( Concurrency Control EnforceConcurrency Control Enforce

ment Errorment Error ) ) 系統錯誤(系統錯誤( System FailureSystem Failure ))

• 電腦錯誤(電腦錯誤( Computer FailuresComputer Failures ) ) • 天災(天災( CatastrophesCatastrophes ))

Page 14: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1414

14-2 14-2 錯誤回復錯誤回復 儲存媒體錯誤(儲存媒體錯誤( Storage Media FailuresStorage Media Failures ))

• 主要是指磁碟錯誤。當交易正在讀寫資料庫資料時,主要是指磁碟錯誤。當交易正在讀寫資料庫資料時,發生磁碟錯誤,以致磁碟中資料可能遺失。針對這發生磁碟錯誤,以致磁碟中資料可能遺失。針對這種錯誤可使用種錯誤可使用 RAIDRAID (( Redundant Array of InexpenRedundant Array of Inexpensive Disksive Disk )硬體提高資料安全性。)硬體提高資料安全性。

Page 15: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1515

14-2 14-2 錯誤回復錯誤回復 錯誤回復程序(錯誤回復程序( Procedure of Failure ReProcedure of Failure Recoverycovery )) 這個程序這個程序 DBMSDBMS 能自動完成而不需任何人工作能自動完成而不需任何人工作業。在說明回復程序前,我們必須先介紹「檢業。在說明回復程序前,我們必須先介紹「檢查點」(查點」( checkpointcheckpoint )事件。「檢查點」是一)事件。「檢查點」是一個系統設定的時間(例如:個系統設定的時間(例如: 55 分鐘、分鐘、 1010 分分鐘),鐘), DBMSDBMS每隔「檢查點」所設定的時間會每隔「檢查點」所設定的時間會處理以下的動作:處理以下的動作:•將主記憶體內所有日誌將主記憶體內所有日誌 (Log)(Log)紀錄存回磁碟中。 紀錄存回磁碟中。 •將緩衝區內已認可將緩衝區內已認可 (Commit)(Commit) 交易之資料回存到磁碟。交易之資料回存到磁碟。

•在日誌中存入檢查點紀錄。在日誌中存入檢查點紀錄。

Page 16: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1616

14-2 14-2 錯誤回復錯誤回復檢查點記錄的主要功能是幫助回復程序作檢查點記錄的主要功能是幫助回復程序作 RRedoedo 和和 UndoUndo 工作,所以包含了系統重啟之工作,所以包含了系統重啟之後必須處理的資訊。 後必須處理的資訊。 RedoRedo:當系統發生錯誤前,交易已作「認可」:當系統發生錯誤前,交易已作「認可」(Commit)(Commit) 動作,但資料尚未寫到磁碟上,根據動作,但資料尚未寫到磁碟上,根據「一致性原則」,從最後一個「檢查點」到「一致性原則」,從最後一個「檢查點」到「認可」的操作,需要「認可」的操作,需要 RedoRedo ,或稱之為向前恢,或稱之為向前恢復復 (Roll Forward)(Roll Forward) 。 。

UndoUndo:當錯誤發生前,交易還未做「認可」動:當錯誤發生前,交易還未做「認可」動作,此時需要強制中斷該交易而作作,此時需要強制中斷該交易而作 UndoUndo 的動作,的動作,也稱之為也稱之為 RollbackRollback。 。

Page 17: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1717

14-3 14-3 交易的並行控制 交易的並行控制 在一個多元程式在一個多元程式 (Multiprogramming)(Multiprogramming) 或多或多工工 (Multi-tasking)(Multi-tasking) 的資料庫系統中,必的資料庫系統中,必須提供「須提供「並行控制並行控制」」 ((Concurrency ControConcurrency Controll)) 機制,否則會發生下列問題: 機制,否則會發生下列問題: 遺失更新問題遺失更新問題 (Lost Update Program) (Lost Update Program) 暫時更新問題暫時更新問題 (Temporary Update Problem) (Temporary Update Problem) 不可重複讀取不可重複讀取 (Nonrepeatable Read) (Nonrepeatable Read) 幽靈讀取幽靈讀取 (Phantom Read) (Phantom Read)

Page 18: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1818

14-3 14-3 交易的並行控制交易的並行控制遺失更新問題遺失更新問題 (Lost Update Program)(Lost Update Program) :兩個交:兩個交易交錯地讀取了共用資料,並且作更新的操作,易交錯地讀取了共用資料,並且作更新的操作,使得前一個交易的資料更新作業遺失了 。使得前一個交易的資料更新作業遺失了 。

•交易交易 T1T1先讀取資料項目先讀取資料項目 XX ,,然後對然後對 XX 作更新處理(作更新處理( X X = = X X + + 100100 )。)。•接著交易接著交易 T2T2 也讀取也讀取 XX且作且作 X X = = X X - - 500500 的處理。的處理。•交易交易 T1T1 將將 XX 寫入資料庫中。寫入資料庫中。•交易交易 T2T2 也將也將 XX更新至資料庫。更新至資料庫。•最後交易最後交易 T1T1 和和 T2T2 分別執行分別執行「認可」(「認可」( CommitCommit )處理。)處理。在此情況下,交易在此情況下,交易 T1T1對資料對資料項目項目 XX 的更新被交易的更新被交易 T2T2 所影所影響而遺失了。響而遺失了。

Page 19: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

1919

14-3 14-3 交易的並行控制交易的並行控制暫時更新問題(暫時更新問題( Temporary Update ProbleTemporary Update Problemm )) 當交易當交易 T1T1更新了某資料項目更新了某資料項目 XX ,但在某原因,但在某原因之下這個交易被迫放棄(之下這個交易被迫放棄( AbortAbort )。如果資料)。如果資料項目項目 XX 也被另一個交易也被另一個交易 T2T2 讀取,這時候交易讀取,這時候交易T2T2 也必須連帶的將也必須連帶的將 XX 回存成舊有的資料值(即回存成舊有的資料值(即T2T2 也被也被 AbortAbort )。)。

Page 20: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2020

14-3 14-3 交易的並行控制交易的並行控制 暫時更新問題如圖所示暫時更新問題如圖所示

• 交易交易 T1T1更新了資料更新了資料 XX但但在正常結束前發生了錯在正常結束前發生了錯誤,使得誤,使得 XX 必須回復成必須回復成舊的資料值。所以交易舊的資料值。所以交易 TT22 讀取了資料讀取了資料 XX 的「暫的「暫時值」(時值」( Temporary valTemporary valueue )。)。

• 這個被這個被 T2T2 讀取的資料也讀取的資料也被稱為「髒資料」(被稱為「髒資料」( DirtDirty datay data ),因此該問題),因此該問題也被稱為「髒讀取問也被稱為「髒讀取問題」(題」( Dirty Read ProblDirty Read Problemem )。)。

Page 21: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2121

14-3 14-3 交易的並行控制交易的並行控制不可重複讀取不可重複讀取 (Nonrepeatable Read)(Nonrepeatable Read) :也:也稱之為不一致分析 稱之為不一致分析 (Inconsistent Analys(Inconsistent Analysis)is) ,該情況發生在一交易讀取同一資料數,該情況發生在一交易讀取同一資料數次以上。 次以上。

例如:交易 1在不同時間點讀取同一筆資料一次以上,而在其中任兩次讀取之間,有另一個交易 2改變了該筆資料。此時則因為該資料錄的內容被改變了,所以會造成交易 1讀取了不同內容的同一筆資料

Page 22: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2222

14-3 14-3 交易的並行控制交易的並行控制幽靈讀取幽靈讀取 (Phantom Read )(Phantom Read ) :發生在兩個:發生在兩個交易中都對資料表作交易中都對資料表作 INSERTINSERT 或或 DELETEDELETE 動動作時所發生。 作時所發生。 例如:當交易例如:當交易 11 讀取一資料表,而交易讀取一資料表,而交易 22 在交在交易易 11 結束之前新增了一筆資料到該資料表中,結束之前新增了一筆資料到該資料表中,則該筆新增資料對交易則該筆新增資料對交易 11 而言有如幽靈而言有如幽靈 (Phant(Phantom)om) ,因為與第一次所讀到的資料不相同。反,因為與第一次所讀到的資料不相同。反之,當交易之,當交易 11 讀取一資料表時,而交易讀取一資料表時,而交易 22卻刪卻刪除一些資料錄,結果就造成交易除一些資料錄,結果就造成交易 11 中存在一些中存在一些不屬於該資料表的幽靈資料錄。 不屬於該資料表的幽靈資料錄。

Page 23: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2323

14-3 14-3 交易的並行控制交易的並行控制並行控制的方法可分為二類:悲觀並行控並行控制的方法可分為二類:悲觀並行控制制 (Pessimistic)(Pessimistic) 與樂觀並行控制與樂觀並行控制 (Optimi(Optimistic) stic) 悲觀並行控制:使用者在執行某個動作而鎖定悲觀並行控制:使用者在執行某個動作而鎖定某些資源之後,其他使用者就不能執行會與該某些資源之後,其他使用者就不能執行會與該鎖定衝突的動作,直到擁有者解除鎖定為止。鎖定衝突的動作,直到擁有者解除鎖定為止。主要是主要是用在高度爭用資源用在高度爭用資源的環境中,以鎖定方的環境中,以鎖定方式來保護資源的成本,會低於發生並行衝突時式來保護資源的成本,會低於發生並行衝突時回復交易的成本。 回復交易的成本。

樂觀並行控制:在該類型並行控制中,使用者樂觀並行控制:在該類型並行控制中,使用者在讀取資料時,並不會將資料鎖定。主要是在讀取資料時,並不會將資料鎖定。主要是用用在低度爭用資源的在低度爭用資源的環境中,偶爾回復交易的成環境中,偶爾回復交易的成本會優於讀取時鎖定資料的成本。 本會優於讀取時鎖定資料的成本。

Page 24: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2424

14-4 SQL Server14-4 SQL Server 中交易與記錄中交易與記錄檔 檔

交易是一組具有邏輯關聯性動作的集合,所交易是一組具有邏輯關聯性動作的集合,所有的動作必須全部完成,不然就是必須一件有的動作必須全部完成,不然就是必須一件都未發生,不能夠處於部分完成的狀態,一都未發生,不能夠處於部分完成的狀態,一交易是不可分割的。例如:將遊戲點數由交易是不可分割的。例如:將遊戲點數由 AA帳號轉移至帳號轉移至 BB 帳號即是一個交易應用,該交帳號即是一個交易應用,該交易包含了下面兩個動作:易包含了下面兩個動作: 因轉出動作而修改因轉出動作而修改 AA 帳號資料 帳號資料 因轉入動作而修改因轉入動作而修改 BB 帳號資料 帳號資料

Page 25: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2525

14-4 SQL Server14-4 SQL Server 中交易與記錄檔中交易與記錄檔如果系統如果系統已經完成已經完成了由了由 AA 帳號轉出的動作,帳號轉出的動作,而此時發生了系統當機,當系統重新開機而此時發生了系統當機,當系統重新開機後,後, AA 帳號客戶就會白白的損失一筆遊戲帳號客戶就會白白的損失一筆遊戲點數,因為尚未轉到點數,因為尚未轉到 BB 帳號帳號,這樣的系統,這樣的系統就不太會有人敢使用了。因此,對於一個就不太會有人敢使用了。因此,對於一個交易內所有動作的處理,必須是交易內所有動作的處理,必須是所有動作所有動作全部完成全部完成,,否則就必須是所有動作全都沒否則就必須是所有動作全都沒有發生有發生,這就是交易最基本的精神。 ,這就是交易最基本的精神。

Page 26: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2626

14-4 SQL Server14-4 SQL Server 中交易與記錄檔中交易與記錄檔交易的三個相關名詞交易的三個相關名詞 -- ROLLBACK-- ROLLBACK 、、 SAVEPOISAVEPOINTNT 以及以及 COMMIT COMMIT ROLLBACKROLLBACK :當系統發生錯誤的時候,將部分完成:當系統發生錯誤的時候,將部分完成交易解除作用,交易解除作用, ROLLBACKROLLBACK可以將一交易復原至一可以將一交易復原至一SAVEPOINTSAVEPOINT 或是交易開始時的狀態。 或是交易開始時的狀態。

SAVEPOINTSAVEPOINT:一個位置定義器,可以於一交易內:一個位置定義器,可以於一交易內定義定義 SAVEPOINTSAVEPOINT ,當系統發生錯誤時將交易復原,當系統發生錯誤時將交易復原至一至一 SAVEPOINTSAVEPOINT 。 。

COMMITCOMMIT:是存檔的動作,它會將一交易內所有對:是存檔的動作,它會將一交易內所有對資料庫的修訂儲存至磁碟上。資料庫的修訂儲存至磁碟上。 COMMITCOMMIT 可以保証所可以保証所有的改變將成為資料庫的永久一部分,而且會釋有的改變將成為資料庫的永久一部分,而且會釋放交易所使用的資源。 放交易所使用的資源。

Page 27: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2727

14-5 14-5 與交易有關的與交易有關的 SQLSQL 敘述 敘述 BEGIN TRANSACTIONBEGIN TRANSACTION

COMMIT TRANSACTIONCOMMIT TRANSACTION

COMMIT WORKCOMMIT WORK

SAVE TRANSACTIONSAVE TRANSACTION

ROLLBACK TRANSACTIONROLLBACK TRANSACTION

ROLLBACK WORKROLLBACK WORK

Page 28: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2828

14-5 14-5 與交易有關的與交易有關的 SQLSQL 敘述敘述BEGIN TRANSACTIONBEGIN TRANSACTION 敘述敘述 語法結構: 語法結構:

BEGIN TRAN[SACTION] [BEGIN TRAN[SACTION] [transaction_nametransaction_name | | @tran_name_variable@tran_name_variable] ]

功能:功能:標示一使用者定義交易的起始點標示一使用者定義交易的起始點

引數: 引數: • transaction_nametransaction_name:為交易的指定名稱,:為交易的指定名稱, transactitransaction_nameon_name必須遵循識別字的命名規則,有效位數為必須遵循識別字的命名規則,有效位數為3232 個文字。個文字。

• @tran_name_variable@tran_name_variable:為一地區性變數,包含一:為一地區性變數,包含一交易的名稱,必須為文字資料型態。交易的名稱,必須為文字資料型態。

Page 29: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

2929

14-5 14-5 與交易有關的與交易有關的 SQLSQL 敘述敘述COMMIT TRANSACTIONCOMMIT TRANSACTION 敘述敘述 語法結構: 語法結構:

COMMIT TRAN[SACTION] [COMMIT TRAN[SACTION] [transaction_nametransaction_name | | @@tran_name_variabletran_name_variable]]

功能:標示一交易的終止點,表示一交易已成功功能:標示一交易的終止點,表示一交易已成功的被執行了。的被執行了。

引數:引數:• transaction_nametransaction_name :為前面:為前面 BEGIN TRANSACTIONBEGIN TRANSACTION敘敘述所指定的交易名稱,但述所指定的交易名稱,但 SQL ServerSQL Server 會忽略該會忽略該 transacttransaction_nameion_name。。

• tran_name_variabletran_name_variable :為地區性一變數,包含一交易的:為地區性一變數,包含一交易的名稱,必須為文字資料型態。名稱,必須為文字資料型態。

Page 30: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3030

14-5 14-5 與交易有關的與交易有關的 SQLSQL 敘述敘述

COMMIT WORKCOMMIT WORK 敘述敘述 語法結構:語法結構:

COMMIT [WORK]COMMIT [WORK] 功能:功能:與與 COMMIT TRANSACTIONCOMMIT TRANSACTION相同,但是不能相同,但是不能接受一使用者定義的交易名稱。接受一使用者定義的交易名稱。 COMMIT [WCOMMIT [WORK] ORK]

Page 31: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3131

14-5 14-5 與交易有關的與交易有關的 SQLSQL 敘述敘述SAVE TRANSACTIONSAVE TRANSACTION 敘述敘述 語法結構:語法結構:

SAVE TRAN[SACTION] [SAVE TRAN[SACTION] [savepoint_namesavepoint_name | | @sav@savepoint_variableepoint_variable]]

功能:功能:在一交易內設定一在一交易內設定一 SAVEPOINTSAVEPOINT

引數:引數:• savepoint_namesavepoint_name :為一:為一 SAVEPOINTSAVEPOINT 的指定名稱的指定名稱• @savepoint_variable@savepoint_variable :為一變數,包含一:為一變數,包含一 SAVEPOISAVEPOI

NTNT 的名稱,必須為文字資料型態。的名稱,必須為文字資料型態。

Page 32: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3232

14-5 14-5 與交易有關的與交易有關的 SQLSQL 敘述敘述ROLLBACK TRANSACTIONROLLBACK TRANSACTION敘述敘述 語法結構:語法結構: ROLLBACK TRAN[SACTION] [ROLLBACK TRAN[SACTION] [transactiontransaction_name_name | | @tran_name_variable@tran_name_variable | | savepoint_namesavepoint_name | | @savep@savepoint_variableoint_variable]]

功能:將一交易功能:將一交易 ROLLBACKROLLBACK至交易的起始點或交易內至交易的起始點或交易內的的 SAVEPOINTSAVEPOINT

引數:引數:• transaction_nametransaction_name :為一於:為一於 BEGIN TRANSACTIONBEGIN TRANSACTION敘述指定的交易名稱敘述指定的交易名稱

• @tran_name_variable@tran_name_variable :為一地區性變數,包含一交:為一地區性變數,包含一交易的名稱,必須為文字資料型態。易的名稱,必須為文字資料型態。

• savepoint_namesavepoint_name :為一:為一 SAVEPOINTSAVEPOINT 的指定名稱的指定名稱• @savepoint_variable@savepoint_variable :為一地區性變數,包含一:為一地區性變數,包含一 SASA

VEPOINTVEPOINT 的名稱,必須為文字資料型態。的名稱,必須為文字資料型態。

Page 33: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3333

14-6 14-6 建立一交易 建立一交易 如何使用如何使用 BEGIN TRANSACTIONBEGIN TRANSACTION 、、 COMMITCOMMIT 、、 SAVEPSAVEPOINTOINT 以及以及 ROLLBACKROLLBACK敘述,撰寫一個交易呢?一個交敘述,撰寫一個交易呢?一個交易的結構大致如下:易的結構大致如下:

BEGIN TRANSACTIONBEGIN TRANSACTIONstatement1statement1

statement2statement2. . . . .. . . . .statementNstatementNIF IF (( successsuccess ))

COMMIT TRANSACTIONCOMMIT TRANSACTIONELSEELSE

ROLLBACK TRANSACTIONROLLBACK TRANSACTIONENDIFENDIF

BEGIN TRANSACTIONBEGIN TRANSACTION標示著一個交易的開始,然後開標示著一個交易的開始,然後開始一系列的始一系列的 SQLSQL操作敘述,最後檢查是否所有的資料修操作敘述,最後檢查是否所有的資料修訂都已成功的被完成,是則執行訂都已成功的被完成,是則執行 COMMITCOMMIT敘述將資料寫敘述將資料寫入磁碟,否則執行入磁碟,否則執行 ROLLBACKROLLBACK敘述將資料回復至交易發敘述將資料回復至交易發生前的狀態。生前的狀態。

Page 34: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3434

14-6 14-6 建立一交易建立一交易範例範例 14-6.114-6.1 :請新增一筆訂單,訂單號碼:請新增一筆訂單,訂單號碼為為 200200 ,訂貨日期為,訂貨日期為 2007-04-012007-04-01 ,經銷商,經銷商號碼為號碼為 10191019 。該訂單包含兩個單項,第一。該訂單包含兩個單項,第一單項產品號碼為單項產品號碼為 11 ,供應商代碼為,供應商代碼為 HSCHSC ,數,數量為量為 22 ;第二單項產品號碼為;第二單項產品號碼為 22 ,供應商代,供應商代碼為碼為 HFTHFT ,數量為,數量為 66 。。 很明顯的必須將很明顯的必須將 33 個個 insertinsert(( 一筆訂單資料,一筆訂單資料,兩筆訂單細項資料兩筆訂單細項資料 ))包裝在一個交易中包裝在一個交易中,因為,因為新增了訂單但是沒有新增細項資料就不正確。新增了訂單但是沒有新增細項資料就不正確。但是在新增資料的過程中要但是在新增資料的過程中要一一檢查是否正確一一檢查是否正確才能才能 COMMIT COMMIT

由於必須依依檢查,因此決定採用由於必須依依檢查,因此決定採用 try …catchtry …catch機制機制

Page 35: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3535

14-6 14-6 建立一交易建立一交易SET IDENTITY_INSERT orders ON;SET IDENTITY_INSERT orders ON;

BEGIN TRANBEGIN TRAN -- -- 開始交易開始交易begin trybegin try -- -- 啟動例外處理機制啟動例外處理機制 insert into orders(order_num,order_date,cust_num) values(200,'2007-04-0insert into orders(order_num,order_date,cust_num) values(200,'2007-04-0

1',1019) --1',1019) -- 訂單訂單 insert into items(item_num,order_num,prod_num,supp_code,quantity) valinsert into items(item_num,order_num,prod_num,supp_code,quantity) val

ues(1, 200, 2, 'HSC', 2) --ues(1, 200, 2, 'HSC', 2) -- 訂單細項一訂單細項一 insert into items(item_num,order_num,prod_num,supp_code,quantity) valinsert into items(item_num,order_num,prod_num,supp_code,quantity) val

ues(2, 200, 6, 'HSC', 2) --ues(2, 200, 6, 'HSC', 2) -- 訂單細項二訂單細項二 COMMIT TRANCOMMIT TRAN -- -- 如果沒有錯誤就認可該交易如果沒有錯誤就認可該交易end tryend try

begin catchbegin catch -- -- 發生錯誤的處理機制發生錯誤的處理機制 ROLLBACK TRANROLLBACK TRAN -- -- 回復該次交易回復該次交易end catchend catch

SET IDENTITY_INSERT orders ON;SET IDENTITY_INSERT orders ON;

Page 36: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3636

14-7 SQL Server 14-7 SQL Server 的的 33 種交易類種交易類型型

交易是以每個連線主,所以每個連線都有交易是以每個連線主,所以每個連線都有自己的交易,但是不同的交易卻可能鎖定自己的交易,但是不同的交易卻可能鎖定相同的物件而造成死結相同的物件而造成死結 (Deadlock)(Deadlock) 的狀況 的狀況 在在 SQL Server 2005SQL Server 2005 中交易的模式有中交易的模式有 33 種,種,分別為:分別為: 外顯交易 外顯交易 (Explicit Transaction)(Explicit Transaction) 、、 自動認可交易自動認可交易 (Autocommit Transaction)(Autocommit Transaction) 隱含交易 隱含交易 (Implicit Transaction) (Implicit Transaction)

Page 37: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3737

14-7 SQL Server 14-7 SQL Server 的的 33 種交易類種交易類型型

外顯交易:是明確定義交易的啟動與結束的一種外顯交易:是明確定義交易的啟動與結束的一種交易,所以亦稱之為明確交易,也就是交易,所以亦稱之為明確交易,也就是使用使用 SQLSQL交易敘述交易敘述所指定的交易。所指定的交易。自動認可交易:這是自動認可交易:這是 SQL Server 2005SQL Server 2005 預設的交易預設的交易管理模式。管理模式。每一個每一個 T-SQLT-SQL敘述句都會在完成時認敘述句都會在完成時認可或回復可或回復。敘述句如果成功地完成則便會自動被。敘述句如果成功地完成則便會自動被認可;如果是遇到任何錯誤則被自動復原。 認可;如果是遇到任何錯誤則被自動復原。 隱含交易:隱含交易的意思就是說隱含交易:隱含交易的意思就是說不用下不用下 BEGIN BEGIN TRANSACTIONTRANSACTION 也會被認為在交易的狀態下也會被認為在交易的狀態下。換。換句話說,從系統進入隱含交易之後所有執行的句話說,從系統進入隱含交易之後所有執行的 SQSQLL敘述都會視為同一個交易,直到使用敘述都會視為同一個交易,直到使用 COMMITCOMMIT或是或是 ROLLBACKROLLBACK 時才算結束一個交易。 時才算結束一個交易。

Page 38: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3838

14-8 14-8 巢狀式交易 巢狀式交易 巢狀式交易巢狀式交易 (Nested Transaction)(Nested Transaction) 是指數個交是指數個交易彼此以階層的方式互相連結,而成為巢易彼此以階層的方式互相連結,而成為巢狀式的結構。狀式的結構。@@TRANCOUNT@@TRANCOUNT 為一整數之全域性變數,為一整數之全域性變數,它指出目前交易的巢狀階層它指出目前交易的巢狀階層 (Nested Level) (Nested Level) BEGIN TRANSACTIONBEGIN TRANSACTION敘述會將敘述會將 @@TRANC@@TRANC

OUNTOUNT 加加 11 ROLLBACK TRANSACTIONROLLBACK TRANSACTION敘述則會將敘述則會將 @@@@

TRANCOUNTTRANCOUNT 設定為設定為 00 COMMIT TRANSACTIONCOMMIT TRANSACTION 或或 COMMIT WORKCOMMIT WORK敘述會將敘述會將 @@TRANCOUNT@@TRANCOUNT減減 11

Page 39: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

3939

14-9 14-9 分散式交易 分散式交易 分散式交易分散式交易 (Distributed Transaction)(Distributed Transaction) 是指一是指一交易使用到多個伺服器的資源。交易使用到多個伺服器的資源。 SQL ServeSQL Server 2005r 2005 亦支援分散式交易,允許使用者在一亦支援分散式交易,允許使用者在一交易中修訂多個伺服器資料庫的資料,一交易中修訂多個伺服器資料庫的資料,一分散式交易會使用到下列系統軟體: 分散式交易會使用到下列系統軟體: 資源管理員資源管理員 (Resource Manager) (Resource Manager) 交易管理員交易管理員 (Transaction Manager) (Transaction Manager) 二階段認可二階段認可 (Two-phase Commit/2PC) (Two-phase Commit/2PC)

Page 40: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4040

14-9 14-9 分散式交易分散式交易資源管理員(資源管理員( Resource ManagerResource Manager )) 資源管理員為管控用於分散式交易資源的系統資源管理員為管控用於分散式交易資源的系統軟體,一分散式交易是由各別資源管理員的地軟體,一分散式交易是由各別資源管理員的地區性交易(區性交易( Local TransactionLocal Transaction )所組成的。在)所組成的。在分散式交易中,每一資源管理員都必須負責本分散式交易中,每一資源管理員都必須負責本身地區性交易的身地區性交易的 COMMITCOMMIT 或是或是 ROLLBACKROLLBACK工工作,而且要與其他的資源管理員相互協調。作,而且要與其他的資源管理員相互協調。 SQSQL ServerL Server 本身即扮演著資源管理員的角色。 本身即扮演著資源管理員的角色。

Page 41: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4141

14-9 14-9 分散式交易分散式交易交易管理員(交易管理員( Transaction ManagerTransaction Manager )) 交易管理員為管控分散式交易交易管理員為管控分散式交易 COMMITCOMMIT 或或 RORO

LLBACKLLBACK 的系統軟體,它會協調各個資源管理的系統軟體,它會協調各個資源管理員,以保證所有包含於一分散式交易的地區性員,以保證所有包含於一分散式交易的地區性交易能夠交易能夠一起被一起被 COMMITCOMMIT 或是一起被或是一起被 ROLLBROLLBACKACK ,, MicrosoftMicrosoft 的分散式交易管理員(的分散式交易管理員( DistriDistributed Transaction Coordinator/DTCbuted Transaction Coordinator/DTC )扮演著交)扮演著交易管理員的角色。 易管理員的角色。

Page 42: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4242

14-9 14-9 分散式交易分散式交易二階段認可(二階段認可( Two-phase Commit/2PCTwo-phase Commit/2PC )) 準備階段準備階段

• 交易管理員送出一「準備交易管理員送出一「準備 COMMITCOMMIT」要求給每一資」要求給每一資源管理員,每一資源管理員會去執行地區性交易,源管理員,每一資源管理員會去執行地區性交易,完成後會只保有最低的必要系統資源(以保證資料完成後會只保有最低的必要系統資源(以保證資料的完整性),並傳回交易成功的訊息給交易管理員。的完整性),並傳回交易成功的訊息給交易管理員。

確認階段確認階段• 如果每一資源管理員於準備階段都如果每一資源管理員於準備階段都 COMMITCOMMIT 成功,成功,則交易管理員會送出「則交易管理員會送出「 COMMITCOMMIT命令」給一資源管命令」給一資源管理員。此時每一資源管理員會立刻將交易記錄為理員。此時每一資源管理員會立刻將交易記錄為「已完成」,並且釋出佔用的系統資源。如果任一「已完成」,並且釋出佔用的系統資源。如果任一資源管理員於準備階段傳回錯誤訊息,則交易管理資源管理員於準備階段傳回錯誤訊息,則交易管理員會送出「員會送出「 ROLLBACKROLLBACK命令」給每一資源管理員。命令」給每一資源管理員。

Page 43: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4343

14-10 14-10 選擇交易隔離層級 選擇交易隔離層級 交易隔離層級交易隔離層級 (Isolation Level)(Isolation Level) 是一種機制,是一種機制,讓我們可以動態的調整讓我們可以動態的調整 SQL ServerSQL Server 於一連於一連線內的鎖定狀況。 線內的鎖定狀況。 交易隔離層級將存取共同資料的多個交易交易隔離層級將存取共同資料的多個交易加以隔離,以決定一交易接受「不一致資加以隔離,以決定一交易接受「不一致資料」的程度。料」的程度。 低交易隔離層級可以增加系統並行處理的程度,低交易隔離層級可以增加系統並行處理的程度,但是會降低資料存取的正確性但是會降低資料存取的正確性 。。

高交易隔離層級能夠讀取正確的資料,但是會高交易隔離層級能夠讀取正確的資料,但是會降低系統並行處理的程度 降低系統並行處理的程度

Page 44: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4444

14-10 14-10 選擇交易隔離層級選擇交易隔離層級交易隔離層級決定了交易隔離層級決定了 SQL ServerSQL Server 使用鎖定使用鎖定機制的方式與程度以解決並行性控制上發機制的方式與程度以解決並行性控制上發生的問題。生的問題。 不淨式讀取不淨式讀取 (Dirty Read)(Dirty Read) :或稱中途讀取,意思:或稱中途讀取,意思就是說在交易讀取到未經認可的中途資料。 就是說在交易讀取到未經認可的中途資料。

不可重複式讀取不可重複式讀取 (Nonrepeatable Read)(Nonrepeatable Read) :意思就:意思就是說在交易中讀取到的資料被其他交易改變了。是說在交易中讀取到的資料被其他交易改變了。

幽靈讀取幽靈讀取 (Phantom Read)(Phantom Read) :意思就是說交易中:意思就是說交易中的資料表被其他交易改變了。 的資料表被其他交易改變了。

Page 45: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4545

14-10 14-10 選擇交易隔離層級選擇交易隔離層級SQL Server 2005SQL Server 2005 支援以下支援以下 ANSI SQLANSI SQL 所定所定義的義的 44 種交易隔離層級: 種交易隔離層級: 讀取未認可 讀取未認可 (Read Uncommitted(Read Uncommitted ,隔離交易的,隔離交易的最低等級,僅能確保不會讀取實體上已損毀的最低等級,僅能確保不會讀取實體上已損毀的資料資料 ) )

讀取認可讀取認可 (Read Committed(Read Committed ,, SQL ServerSQL Server 的預的預設值設值 ) )

可重覆讀取可重覆讀取 (Repeatable Read) (Repeatable Read) 可序列化可序列化 (Serializable(Serializable ,隔離交易的最高等級,,隔離交易的最高等級,使交易完全與其他交易隔離使交易完全與其他交易隔離 ) )

Page 46: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4646

14-10 14-10 選擇交易隔離層級選擇交易隔離層級表 14-10.1 交易隔離層級的現象

交易隔離層級 是否會發生不淨式讀取

是否會發生不可重複式讀取

是否會發生幽靈讀取

Read Uncommitted

是 是 是

Read Committed 否 是 是

Repeatable Read 否 否 是

Serializable 否 否 否

•Read Uncommitted 與 Read Committed屬於樂觀的並行性控制 •Repeatable Read 與 Serializable 則屬於悲觀的並行性控制

Page 47: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4747

14-10 14-10 選擇交易隔離層級選擇交易隔離層級根據選擇的交易隔離層級,當存取資源時,根據選擇的交易隔離層級,當存取資源時,系統會使用鎖機制系統會使用鎖機制 (Lock)(Lock) 鎖住該資源,以鎖住該資源,以便免其他交易來存取而發生一些錯誤的現便免其他交易來存取而發生一些錯誤的現象。象。可使用可使用 SET TRANSACTION ISOLATION LSET TRANSACTION ISOLATION LEVELEVEL 敘述來設定交易隔離層級 敘述來設定交易隔離層級 語法結構:語法結構: SET TRANSACTION ISOLATION SET TRANSACTION ISOLATION

LEVEL LEVEL {{ READ COMMITTED | READ UNCOREAD COMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZAMMITTED | REPEATABLE READ | SERIALIZABLEBLE} }

Page 48: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4848

14-10 14-10 選擇交易隔離層級 選擇交易隔離層級 SET LOCK_TIMEOUTSET LOCK_TIMEOUT 敘述敘述 語法結構:語法結構: SET LOCK_TIMEOUT timeout_periodSET LOCK_TIMEOUT timeout_period 功能:宣告一功能:宣告一 SQLSQL敘述等待一鎖機制被釋放的時間敘述等待一鎖機制被釋放的時間

(TIME-OUT)(TIME-OUT) ,以千分之一秒為單位,,以千分之一秒為單位, -1-1表示永久的表示永久的等待,但永久等待很容易造成死結,此為系統預設值 等待,但永久等待很容易造成死結,此為系統預設值 。 。

範例範例 14-10.114-10.1 ::請設定請設定 TIME-OUTTIME-OUT 為為 1,8001,800毫秒,然後查詢毫秒,然後查詢該設定值。該設定值。

set lock_timeout 1800set lock_timeout 1800

select @@lock_timeoutselect @@lock_timeout

Page 49: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

4949

14-1114-11 鎖定與死結 鎖定與死結 SQL ServerSQL Server 擁有多個資料粒度擁有多個資料粒度 (Granularity)(Granularity) 的鎖的鎖定定 (Lock)(Lock) ,允許交易,允許交易鎖定不同類型鎖定不同類型的資源。的資源。為了把鎖定的成本降至最低,為了把鎖定的成本降至最低, SQL ServerSQL Server 會自動會自動依照交易的適當層級來鎖定資源。依照交易的適當層級來鎖定資源。 鎖定於較小的資料粒度如資料列則可以提高並行性,鎖定於較小的資料粒度如資料列則可以提高並行性,但如果鎖定太多的資料列則會因為持有更多的鎖定而但如果鎖定太多的資料列則會因為持有更多的鎖定而造成系統的負擔,可能反而不如直接鎖定資料表。造成系統的負擔,可能反而不如直接鎖定資料表。

鎖定於較大的資料粒度如資料表,從並行性的角度來鎖定於較大的資料粒度如資料表,從並行性的角度來看會因為鎖定整個資料表而限制其他交易對於該資料看會因為鎖定整個資料表而限制其他交易對於該資料表其他部份的存取。但由於必須維持的鎖定較少,因表其他部份的存取。但由於必須維持的鎖定較少,因此系統的負擔較低。此系統的負擔較低。

Page 50: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5050

14-1114-11 鎖定與死結鎖定與死結除了資料類型鎖定之外,還提供不同的資料鎖定模式: 共用鎖定 (S/Shared Lock):用於不作更新資料的讀取作業,例如 SELECT敘述句。

獨佔鎖定 (X/eXclusive Lock):用於資料修改動作,例如 INSERT 、 UPDATE 以及 DELETE 。

更新鎖定 (U/Update Lock):更新 (U)鎖定可防止常見的死結。

意圖鎖定 (I/Intent Lock):意圖鎖定主要是用來防止其他交易修改較高層級的資源,而導致較低層級的鎖定失效與改進 SQL Server偵測資料粒度較高層級鎖定衝突的效率。

Page 51: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5151

14-1114-11 鎖定與死結鎖定與死結有些鎖定可以同時發生在資源 ( 換句話說就是不同的交易同時對一個資源發出鎖定 )上,但有些就不行,稱之為鎖定模式的相容性,如下表所列。

Page 52: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5252

14-1114-11 鎖定與死結鎖定與死結死結:當二或多個工作各自具有某個資源死結:當二或多個工作各自具有某個資源的鎖定,但其他工作嘗試要鎖定此資源,的鎖定,但其他工作嘗試要鎖定此資源,而造成工作永久封鎖彼此時就發生死結 ,而造成工作永久封鎖彼此時就發生死結 ,例如:例如: 交易 交易 A A 取得資料列 取得資料列 1 1 的共用的共用 (S)(S)鎖定。鎖定。 交易 交易 B B 取得資料列 取得資料列 2 2 的共用的共用 (S)(S)鎖定。鎖定。 交易 交易 A A 現在要求資料列 現在要求資料列 2 2 的獨佔的獨佔 (X)(X)鎖定,鎖定,但會被封鎖直到交易 但會被封鎖直到交易 B B 完成並釋出對資料列 完成並釋出對資料列 2 2 的共用的共用 (S)(S)鎖定為止 鎖定為止

交易 交易 B B 現在要求資料列 現在要求資料列 1 1 的獨佔的獨佔 (X)(X)鎖定,鎖定,但會被封鎖直到交易 但會被封鎖直到交易 A A 完成並釋出對資料列 完成並釋出對資料列 1 1 的共用的共用 (S)(S)鎖定為止。 鎖定為止。

Page 53: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5353

14-1114-11 鎖定與死結鎖定與死結在這種情況下,等到交易在這種情況下,等到交易 BB 完成後,交易完成後,交易 AA才能完成;但交易才能完成;但交易 BB 被交易被交易 AA 封鎖了。這封鎖了。這個狀況也稱為「循環相依性」個狀況也稱為「循環相依性」 (Cyclic Dep(Cyclic Dependency) endency)

Page 54: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5454

14-1114-11 鎖定與死結鎖定與死結降低死結發生率的建議方式: 降低死結發生率的建議方式: 以相同的順序來存取物件 以相同的順序來存取物件 將交易維持在單一批次中且愈短愈好 將交易維持在單一批次中且愈短愈好 在交易中避免使用者互動 在交易中避免使用者互動 使用較低的隔離等級 使用較低的隔離等級

Page 55: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5555

14-12 14-12 本章總結本章總結 資料庫的異動必須以交易的方式執行,這樣才能資料庫的異動必須以交易的方式執行,這樣才能確保資料的完整性與一致性 確保資料的完整性與一致性 交易是一個單一工作單元該工作邏輯單元必須呈交易是一個單一工作單元該工作邏輯單元必須呈現出四種屬性,才能有資格成為一筆交易,分別現出四種屬性,才能有資格成為一筆交易,分別為:單元性為:單元性 (Atomicity)(Atomicity) 、一致性、一致性 (Consistenc(Consistency)y) 、隔離性、隔離性 (Isolation) (Isolation) 以及耐久性以及耐久性 (Durabili(Durability) ty) 屬性,簡稱為屬性,簡稱為 ACID ACID 交易管理在交易管理在 DBMSDBMS 是由錯誤回復是由錯誤回復 (Failure Recove(Failure Recovery)ry) 和並行控制和並行控制 (Concurrency Control)(Concurrency Control) 兩個主兩個主要機制來達成。 要機制來達成。 「錯誤回復」機制是維持交易處理的「單元性」「錯誤回復」機制是維持交易處理的「單元性」和「耐久性」,而「並行控制」機制是在維持和「耐久性」,而「並行控制」機制是在維持「隔離性」和「一致性」 。 「隔離性」和「一致性」 。

Page 56: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5656

14-12 14-12 本章總結本章總結在一個多元程式在一個多元程式 (Multiprogramming)(Multiprogramming) 或多工或多工 (Mult(Multi-tasking)i-tasking) 的資料庫系統中,必須提供「並行控的資料庫系統中,必須提供「並行控制」制」 (Concurrency Control)(Concurrency Control) 機制,否則將會發生遺機制,否則將會發生遺失更新問題失更新問題 (Lost Update Program)(Lost Update Program) 、暫時更新問、暫時更新問題題 (Temporary Update Problem(Temporary Update Problem ,或稱之為中途讀,或稱之為中途讀取問題取問題 Dirty Read Problem)Dirty Read Problem) 、不可重複讀取、不可重複讀取 (Nonr(Nonrepeatable Read)epeatable Read) 以及幽靈讀取以及幽靈讀取 (Phantom Read)(Phantom Read) 等問等問題。 題。 SQL ServerSQL Server 支援支援 44種交易隔離層級 種交易隔離層級 -- Read Unco-- Read Uncommittedmmitted 、、 Read CommittedRead Committed 、、 Repeatable ReadRepeatable Read 以以及及 Serializable Serializable

Page 57: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5757

14-12 14-12 本章總結本章總結Read UncommittedRead Uncommitted 的層級最低,使用的系統資源的層級最低,使用的系統資源最少,但是系統並行處理性最高,最少,但是系統並行處理性最高, SerializableSerializable 的的層級最高,使用的系統資源最多,但是系統並行層級最高,使用的系統資源最多,但是系統並行處理性最低。 處理性最低。 SQL ServerSQL Server 會每隔一段時間,將那些已被修改過會每隔一段時間,將那些已被修改過的資料寫入資料庫,這種動作我們稱之為查核點。的資料寫入資料庫,這種動作我們稱之為查核點。 所謂的分散式交易所謂的分散式交易 (Distributed Transaction)(Distributed Transaction) 是指一是指一交易使用到多個伺服器的資源,一分散式交易會交易使用到多個伺服器的資源,一分散式交易會使用資源管理員使用資源管理員 (Resource Manager)(Resource Manager) 、交易管理員、交易管理員(Transaction Manager)(Transaction Manager) 以及二階段認可以及二階段認可 (Two-phase (Two-phase Commit/2PC) Commit/2PC)

Page 58: Ch14. 交易處理 交易 (Transaction) 概念介紹 多人系統下的交易的並行控制 錯誤與例外處理機制 Ch15. 資料庫的備份與還原 資料庫的備份 / 還原、卸離

5858

14-12 14-12 本章總結本章總結在在 SQL Server 2005SQL Server 2005 資料鎖定的模式可分為資料鎖定的模式可分為共用鎖定共用鎖定 (S/Shared Lock)(S/Shared Lock) 、獨佔鎖定、獨佔鎖定 (X/eX(X/eXclusive Lock)clusive Lock) 、更新鎖定、更新鎖定 (U/Update Lock)(U/Update Lock)以及意圖鎖定以及意圖鎖定 (I/Intent Lock)(I/Intent Lock) 。而意圖鎖定。而意圖鎖定又可分為意圖共用又可分為意圖共用 (IS)(IS) 、意圖獨占、意圖獨占 (IX)(IX) 以以及與意圖獨佔共用及與意圖獨佔共用 (SIX)(SIX) 。 。