1、認識交易(transaction)的定義。了解交易與同時性控制的問題。了解資料庫系統處理交易與同時性控制的方法。交易管理(transaction management)是什麼?同時性控制(concurrency control)是什麼?這是一個腦力激盪的園地!交易管理(transaction management)並行控制(concurrency control)復原(recovery)交易(transaction)是資料庫裡頭很特別的觀念一個資料庫的交易可以看成是一連串針對資料進行的讀取與更新的作業交易可能是由使用者或是應用程式所啟動執行資料庫中的交易看起來可能像是一整個程式、程式的一部分或
2、是單一的指令 同時存取控制的程序管理資料庫的同時存取作業,確保同時進行的操作之間不會互相干擾(interfere)所謂的並行是指一項作業還沒完全完成就進行另一項作業假如把交易看成是一種邏輯上的作業單位的話,同時存取控制的目的就是要避免同時進行的交易互相干擾(READ)先取得含有資料項目的disk block的address,接著把disk block複製(copy)到主記憶體的buffer,最後把資料項目從buffer複製到程式變數(program variable)中。(WRITE)先取得含有資料項目的disk block的address,接著把disk block複製(copy)到主記憶體
3、的buffer,然後把程式變數複製到該buffer,最後把disk block存回磁碟。交易可以看成是一連串的Read與Write 交易本身應該具有所謂的獨立性或孤立性(isolation)交易應該具有所謂的單元性(Atomicity)交易應該具有所謂的一致性(consistency)資料庫系統要保障交易結果的正確性 電腦的失敗(computer failure)系統錯誤(system error)交易執行發生例外(exception)狀況同時控制(concurrency control)的要求磁碟毀壞環境災難或實際設備發生問題begin_transaction:表示交易開始進行。read/w
4、rite:交易對資料庫進行讀(read)與寫(write)的作業。end_transaction:表示交易結束,但是可能還沒有確認(commit)。commit:確定交易成功地完成了!造成的改變不會被取消(undone)。rollback/abort:表示交易沒有成功,造成的改變必須取消(undone)。start_transaction,T:表示交易T開始執行。write_item,T,X,old_value,new_value:交易T將資料庫的資料X從原來的old_value更新為new_value。read_item,T,X:交易T讀取資料庫的資料Xcommit,T:交易T成功執行完畢,
5、其效應已經永久地儲存到資料庫中。abort,T:交易T被取消(aborted)。暫時停止所有交易的進行。將所有被更新過的main memory buffer強制寫入(force-writing)磁碟中。將checkpoint記錄寫入log,通時把log強制寫入(force-writing)磁碟中。繼續開始執行交易。兩個操作屬於不同的交易。兩個操作用到(access)相同的資料。其中的一個操作是對資料進行寫入(write)。result equivalentconflict equivalent view equivalent資料的鎖定(locking)時間戳記(timestamp)多版同時控制
6、(multiversion concurrency control)資料鎖(lock)是與資料項目相關的變數(variable),用來描述資料本身與操作之間的相關性以及目前的狀態資料庫中的資料項目都有一個對應的lock,用來控制多個交易對於資料的同時存取二元鎖(binary lock)有兩種狀態:locked與unlocked,也可以分別用1與0來表示當某個資料項目的lock值是1時表示該資料項目目前無法被存取,當某個資料項目的lock值是0時則代表該資料項目可以被存取 DBMS會為交易建立一個時間戳記(timestamp),用來辨識交易通常timestamp的值是以系統開始處理交易的順序來決
7、定的,所以也可以看成是一個交易T的開始執行時間,以TS(T)來表示一般可以運用計數器(counter)或是系統的時間來產生timestamp我們可以利用timestamp來安排交易執行的順序,讓這樣安排出來的schedule有serializable的特性,這也稱為所謂的timestamp ordering 多版同時控制會保存資料多個版本的值,當有交易需要存取資料時,會在維持schedule的serializability的前提下選擇適當的版本對於read的操作來說,讀取目前的值可能會違反規則,但是讀取之前的值就不會有影響write的操作則需要連同原來的值也保存起來 在分散式的資料庫系統中,所有執行一個交易T的節點必須對於T的執行結果有一致的看法假如T確認(commit)的話,必須在所有執行T的節點上都commit。假如T取消(abort)的話,必須在所有執行T的節點上都abort我們需要確認的協定(commit protocol)來達到這樣的要求