數據庫事務處理的併發控制技術(二):事務模型

一個存取或更改數據庫的程序的運行成爲數據庫事務,簡稱事務。事務是數據庫應用程序的基本邏輯單位。下面咱們詳細說事務的操做、狀態和狀態轉換。算法

1. 事務中的讀寫操做


在併發控制和數據庫恢復技術中,咱們只需在數據項和磁盤塊的級別上考慮事務中的數據庫操做。在這個級別上,事務中的數據庫操做只包括如下兩個讀寫操做:數據庫

  1. READ(X, Y) 讀取數據庫中的數據項X,存入程序變量Y。
  2. WRITE(Y, X) 程序變量Y的值寫入數據庫中的數據項X。

磁盤和主存儲器之間的數據交換是以磁盤塊爲單位進行的。雖然數據項多是一個數據庫記錄或更大的數據單位,數據項在多數狀況下是數據庫記錄的一個數據域。安全

READ(X, Y)的實現算法以下:併發

  1. 肯定包含數據項X的磁盤塊的地址A;
  2. 若是地址爲A的數據不在主存緩衝區中,則把A所在磁盤塊讀入到主存緩衝區;
  3. 從主存緩衝區找到數據項X,存入程序變量Y。

WRITE(Y, X)的實現算法以下:設計

  1. 肯定包含數據項X的磁盤塊地址A;
  2. 若是地址爲A的數據不在主存緩衝區中,則把A所在磁盤塊讀入到主存緩衝區;
  3. 把程序變量Y的值存入磁盤塊所在的主存緩衝區;
  4. 當即或之後把包含A磁盤塊的緩衝區寫到磁盤存儲器。

任何事務都使用如上定義的READ和WRITE操做讀取數據庫。blog

2. 事務的原子性


每一個事務都必須知足以下的性質:該事務中的全部操做要麼所有被成功完成而且這些操做的結果被永久的存儲到數據庫中,要麼這個事務對數據庫和其餘事務沒有任何影響。咱們稱這種性質爲事務的原子性。保證事務的原子性是事務處理的重要目的。保證事務原子性的主要方法是「串行化」方法。事務的原子性可能遭到破壞的因素有以下兩個:事務

  1. 多個事務併發時,不一樣事務的操做交叉運行。
  2. 事務在運行中間被強行中止。

在第一種狀況下,數據庫管理系統必須保證多個事務的交叉運行不影響這些事務的原子性。在第二種狀況下,數據庫系統必須保證被強行終止的事務對數據庫和其餘事務沒有任何影響。程序設計

3. 事務的狀態


咱們須要嚴格定義事務的「成功完成」等概念。因此必須考慮事務運行過程當中的狀態變化。一個事務必須處於以下狀態之一:變量

  1. 活動狀態 事務開始運行就進入活動狀態,直到部分提交或失敗。
  2. 部分提交狀態 事務執行完最後一條語句,即執行完END-TRANSACTION命令以後進入部分提交狀態。咱們下面定義END-TRANSACTION命令。
  3. 失敗狀態 發現一個事務不能正常運行下去時,該事務進入失敗狀態,數據庫管理系統必須消除它對數據庫和其餘事務的影響。
  4. 異常結束狀態 當一個失敗的事務對數據庫和其餘事務的影響被消除,數據庫恢復到該事務開始執行前的狀態之後,該事務退出數據庫系統,進入異常結束狀態。
  5. 提交狀態 當一個事務成功完成了全部操做,而且全部操做對數據庫的影響都已經永久存入數據庫以後,該事務退出數據庫系統,進入提交狀態,正常結束。

咱們能夠在事務中執行以下的操做來實現事務狀態的轉換:軟件

  1. BEGIN-TRANSACTION 開始運行事務,使事務進入活動狀態。
  2. END-TRANSACTION 說明事務中的全部讀寫操做都已經完成,使事務進入部分提交狀態,把全部操做對數據庫的影響存入數據庫。
  3. COMMIT-TRANSACTION 標誌事務已經成功完成,事務中全部操做對數據庫的影響已經安全存入數據庫,事務進入提交狀態,結束事務的運行。
  4. ABORT-TRANSACTION 標誌事務進入失敗狀態,系統消除事務中全部操做對數據庫和其餘事務的影響,結束事務的運行。

除了以上操做外,有些數據庫恢復技術還要求以下的一些操做:

  1. UNDO 消除事務中指定數據操做對數據庫的影響。
  2. REDO 從新執行事務中指定數據庫操做,保證該操做對數據庫的影響可以安全存入數據庫。

下圖給出了事務的狀態轉換圖。一個事務在開始運行以後,當即進入活動狀態。當它執行到最後一條語句,即END-TRANSACTION時,進入部分提交狀態。此時,事務已經成功完成了它的全部操做。可是該事務的操做對數據庫的影響還並無真正的存入數據庫,因此仍然可能失敗。並且,併發控制和數據庫恢復機制還要對這個事務進行其餘方面的檢查,肯定它是否可以成功地結束。該事務已經知足併發控制和數據庫恢復機制的要求,而且它的全部操做對數據庫的影響已經安全存入數據庫,進入提交狀態,成功結束。處於活動狀態的事務可能因爲某些緣由不能繼續正常執行,這時,事務將進入失敗狀態。一個事務進入失敗狀態後,數據庫管理系統首先消除該事務的操做對數據庫和其餘事務的影響,而後使該事務進入異常結束狀態,並完成下述兩項任務之一:

  1. 若是事務的失敗是由該事務無關的外部緣由引發的,如系統軟件錯誤等,則可從新啓動該事務,使之做爲一個新的事務開始運行。
  2. 若是事務的失敗是由事務內部的邏輯錯誤引發的,則該事務的程序有錯誤,須要重寫程序來糾正錯誤。此時,數據庫系統廢除失敗的事務,並通知用戶重寫該事務的程序。

活動的事務也能夠經過ABORT-TRANSACTION操做進入失敗狀態,終止自身運行。

4. 事務的性質


事務的性質須要數據庫管理系統的併發控制和數據庫恢復機制來保證。

  1. 原子性 事務是數據庫系統運行的程序單元。每一個事務的操做要麼被所有成功執行,要麼一個都不被執行。
  2. 數據庫正確保持性 一個事務的正確執行必須把數據庫從一個正確狀態轉換成另外一個正確狀態。
  3. 操做結果永久保持性 若是一個事務使數據庫發生了變化,並且該事務已經進入提交狀態,則這些改變不會由於之後的失敗而丟失。
  4. 獨立性 一個事務在進入提交狀態以前,它對數據庫的更新不可由其餘事務讀取,這個性質避免了上一篇隨筆中說到的臨時值問題,也避免了後面將討論的嵌套回滾處理問題。通常來講,不一樣的併發控制和數據庫恢復方法要求不級別的獨立性。
  5. 可串行性 併發運行的多個事務的運行效果與這些事務按某種次序順序執行的效果相同。可串行性是各類併發控制方法所要求的關鍵性質。

保證事務原子性是數據庫恢復機制的責任;數據庫正確保持性是事務程序設計者的責任;操做結果永久保持性是數據庫恢復機制的責任;獨立性是數據庫恢復機制的責任;可串行性是併發控制機制的責任。

事務咱們已經詳細的說過了,那下次咱們就講事務的調度和事務調度的可串行性。

相關文章
相關標籤/搜索