交易 (Database Engine)

交易 (Transaction) 是以工作的單一邏輯單元 (Logic Unit) 來執行的一系列相關作業。工作邏輯單元必須呈現出四種屬性,即不可部份完成性 (Atomicity)、一致性 (Consistency)、隔離性 (Isolation) 與耐久性 (Durability) 屬性,稱為 ACID,才能有資格成為一筆交易。

  • 不可部份完成性
    交易必須是不可部份完成 (Atomic) 的工作;資料的修改不是全部執行,就是全部不執行。

  • 一致性
    交易完成時,全部的資料必須維持一致性的狀態。在關聯式資料庫 (Relational Database) 中,必須將所有的規則 (Rule) 套用於交易的修改,以維護所有的資料整合性 (Integrity)。所有的內部資料結構,例如 B 型樹狀結構索引 (B-tree Index) 或是雙向連結串列 (Doubly-Linked List),在交易終止時必須是正確的。

  • 隔離性
    並行的交易所做的修改,必須與其他任何並行的交易所做的修改隔離。交易所辨識的資料不是處於另一筆並行的交易修改資料之前的狀態,就是處於第二筆交易完成後的狀態,但是卻無法辨識中繼狀態。這稱為序列化能力 (Serializability),因為這樣可以產生重新載入起始資料並重新執行一系列的交易,以便讓資料最終能夠與原始交易執行後的狀態相同的能力。

  • 耐久性
    交易完成之後,其作用便永遠存在於系統之中。即使系統發生失敗的事件但修改仍會保存。

指定與強制交易

SQL 程式設計者負責在強制資料邏輯一致性 (Consistency) 的點上啟動與結束交易。程式設計者必須定義資料修改順序,讓資料維持在與組織的商業規則有關的一致性狀態。然後再由程式設計者將這些修改陳述式包含於單一的交易中,這樣 SQL Server Database Engine便得以強制交易的實體完整性。

提供可確保每一筆交易實體完整性的機制是企業資料庫系統 (例如Database Engine的執行個體) 的責任。Database Engine提供:

  • 保持交易隔離性 (Isolation) 的鎖定機能 (Locking Facility)。

  • 確保交易耐久性 (Durability) 的記錄機能。即使伺服器的硬體、作業系統、或是Database Engine執行個體本身發生失敗,該執行個體仍會在重新啟動時,使用交易記錄檔將所有未完成的交易自動復原到系統失敗的點。

  • 強制不可部份完成性 (Atomicity) 與一致性的交易管理功能。交易在啟動之後必須成功地完成,否則Database Engine的執行個體便將交易啟動後所做的所有資料修改動作恢復。