9-1資料並行性與資料一致性 9-2常見的並行控制問題  
9-3排程(Schedule)的概念 9-4鎖定(Locks)  
9-5ORACLE的鎖定機制  
   
 

何謂資料並行性(Data Concurrency)與資料一致性(Data Consistency):

    在單一使用者的資料庫(Single-User Database),使用者要隨意利用異動交易(Transaction)來修改資料庫中資料,而不必顧慮是否有其他使用者也同時修改相同資料。然而在多使用者資料庫(Multi-User Database)中,會有多個異動交易同時更新資料庫中相同的資料。並行地執行這些異動交易,必須保證其結果必須與循序地執行這些異動交易相同,這也就所謂的資料一致性(Data Consistency)。所以在多使用者資料庫中的主要考慮為如何做到資料並行性(Data Concurrency)與資料一致性。而異動交易管理(Transaction Mangement)是資料庫系統中最重要的議題之一。其主要目的是要維護資料的一致性(Consistency)、正確性(Correctness)與並行控制(Concurrency)。在資料庫系統中,所有會更改到資料庫中資料內容的動作都以異動交易為主要的處理單位,而異動交易管理的主要目的也就是要維持異動交易的四大特性:單元性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持續性(Durability)。這是由Jim N. Gray於1981年提出的概念。

   

異動交易的四大特性:

 
單元性(Atomicity)

通常 一個異動交易,中包含了數個以上資料庫動作(Actions)。整個異動交易必須視為一個不可分割的單元。也就是整個異動交易的所有動作必須全部做完,若異動交易的中間過程中有任何錯誤產生時,必須撤回(Rollback)到未執行異動交易前的原點,也就是整個異動都不做。

   

你到提款機前領錢,領錢的全部過程即是一個異動交易,其主要可分為二大部分:

  1. 銀行從你的帳戶內扣款。
  2. 自動提款機給錢。若這異動交易過程中,因某些原因,例如:帳戶內餘額不足無法扣款,而無法完成全部異動交易的動作,則整個異動交易會被撤回。
 
一致性(Consistency)

異動交易在處理過程前後,必須使資料庫處理保持一致的狀態,雖然異動交易的過程中未必保持一致性。

   

甲先生轉帳1000到乙先生的帳戶,這易動交易包含二大部分:

  • 銀行由甲帳戶先扣款1000元。
  • 銀行將1000元加入乙帳戶內。

在這異動交易前的甲與乙帳戶金額總和一定會和異動交易後甲與乙帳戶內的金額總和相同。雖然在這異動的第一部分動作(銀行由甲帳戶中先扣款1000元)做完後,資料庫正處於不一致狀態(因為金額總和少了1000元),但等到第二部份動作(銀行將1000元加入乙帳戶),資料庫又會保持一致性的狀態。

 
隔離性(Isolation)

異動交易執行的過程中,所用到的資料或所產生的中間結果,都不能透露給其它異動交易讀取或更改,稱之為異動交易的「隔離性」。因為任何異動交易在委付確認(Commit)前都有可被撤回(Rollback),為了避免其他異動交易B,會因使用異動交易A所產生的中間結果。但因事後該異動交易A撤回而導致「連鎖撤回效應」(Cascading Rollback)。因此異動交易間彼此是隔離的。也就是說,正常性況下通常會有許多異動交易是並行執行,但是每個異動交易的更新對其他異動交易而言都是隱藏的,直到該異動交易被委付確認(Commit)為止。換句話說,對於任意兩個不同的異動交易T1與T2的更新,T1可能可以看到T2的更新在T2被委付確認後;或者T2可能可以看到T1的更新,在T1被委付確認後,但是絕對不可能T1與T2同時都可看到對方的更新。

   

甲欲由自動提款機中提款1000元而乙欲由自己帳戶中轉5000元到甲的帳戶中,若甲的異動交易先執行,則乙的異動交易必須等待甲的異動交易委付確認後,才能執行將5000元,增加入甲的帳戶內的動作。其中乙帳戶扣款的動作,可與甲的異動交易同時並行執行,不必等待。

 
持續性(Durability)

如果異動交易執行過程都完全正常,且異動交易被委付確認後,無論事後系統發生錯誤,則常系統排除錯誤,恢復正常時,原異動交易被委付確認的資料仍必須存在。