1. 程式人生 > >資料庫事務和鎖(一)

資料庫事務和鎖(一)

簡述

    關係型資料庫有四個顯著的特徵,即安全性、完整性、併發性和監測性。資料庫的安全性就是要保證資料庫中資料的安全,防止未授權使用者隨意修改資料庫中的資料,確保資料的安全。在大多數資料庫管理系統中,主要是通過許可來保證資料庫的安全性。完整性是資料庫的一個重要特徵,也是保證資料庫中的資料切實有效、防止錯誤、實現商業規則的一種重要機制。在資料庫中,區別所儲存的資料是無用的垃圾還是有價值的資訊,主要是依據資料庫的完整性是否健全。在SQL Server 7.0中,資料的完整性是通過一系列邏輯來保障的,這些邏輯分為三個方面,即實體完整性、域完整性和參考完整性。對任何系統都可以這樣說,沒有監測,就沒有優化。這句話用在資料庫管理系統方面,也是切合實際的。只有通過對資料庫進行全面的效能監測,也才能發現影響系統性能的因素和瓶頸,才能針對瓶頸因素,採取切合實際策略,解決問題,提高系統的效能。併發性也是一個非常重要的概念,它是用來解決多個使用者對同一資料進行操作時的問題。特別是對於網路資料庫來說,這個特點更加突出。提高資料庫的處理速度,單單依靠提高計算機的物理速度是不夠的,還必須充分考慮資料庫的併發性問題,提高資料庫併發性的效率。那麼如何保證併發性呢?在這個面向下一世紀的資料庫產品SQL Server 7.0中,通過使用事務和鎖機制,解決了資料庫的併發性問題。

概念和特點

事務和鎖是兩個緊密聯絡的概念。事務就是一個單元的工作,包括一系列的操作這些操作要麼全部成功,要麼全部失敗。事務確保多個數據的修改作為一個單元來處理。例如,在銀行業務中,有一條記帳原則,即有借有貸,借貸相等。那麼為了保證這種原則,就得有確保借和貸的登記要麼同時成功,要麼同時失敗。如果出現只記錄了借,或者只記錄了貸,那麼就違反了記帳原則,就會出現記錯帳的情況。SQL Server通過支援事務機制管理多個事務,保證事務的一致性。事務使用鎖,防止其他使用者修改另外一個還沒有完成的事務中的資料。對於多使用者系統來說,鎖機制是必須的。在SQL Server 7.0中,使用事務日誌來保證修改的完整性和可恢復性。

    SQL Server有多種鎖,允許事務鎖定不同的資源。鎖就是保護指定的資源,不被其他事務操作。為了最小化鎖的成本,SQL Server自動地以與任務相應等級的鎖來鎖定資源物件。鎖定比較小的物件,例如鎖定行,雖然可以提高併發性,但是卻有較高的開支,因為如果鎖定許多行,那麼需要佔有更多的鎖。鎖定比較大的物件,例如鎖定表,會大大降低併發性,因為鎖定整個表就限制了其他事務訪問該表的其他部分,但是成本開支比較低,因為只需維護比較少的鎖。

    事務和鎖具有以下特點:

  • 事務是一個單元的工作,要麼全做,要麼全不做
  • 事務保證操作的一致性和可恢復性
  • 每一條Transact-SQL語句都可以是一個事務
  • 實際使用的事務是使用者定義的事務,它包括一系列操作或者語句
  • 在多伺服器環境中,使用使用者定義的分散式事務,保證操作的一致性
  • 鎖是保證併發控制的手段
  • 可以鎖定的資源包括行、頁、簇、表和資料庫
  • 鎖的型別主要包括共享鎖和排它鎖
  • 特殊型別的鎖包括意圖鎖、修改鎖和模式鎖
  • 共享鎖允許其他事務繼續使用鎖定的資源
  • 排它鎖只允許一個事務訪問資料
  • 系統本身可以處理死鎖
  • 使用者可以根據實際情況定製鎖的一些特徵

事務

事務的定義

    事務是指一個單元的工作,這些工作要麼全做,要麼全部不做。作為一個邏輯單元,必須具備四個屬性:自動性、一致性、獨立性和永續性。自動性是指事務必須是一個自動的單元工作,要麼執行全部資料的修改,要麼全部資料的修改都不執行。一致性是指當事務完成時,必須使所有資料都具有一致的狀態。在關係型資料庫中,所有的規則必須應用到事務的修改上,以便維護所有資料的完整性。所有的內部資料結構,例如樹狀的索引與資料之間的連結,在事務結束之後,必須保證正確。獨立性是指並行事務的修改必須與其他並行事務的修改相互獨立。一個事務看到的資料要麼是另外一個事務修改這些事務之前的狀態,要麼是第二個事務已經修改完成的資料,但是這個事務不能看到正在修改的資料。這種特徵也稱為序列性。永續性是指當一個事務完成之後,它的影響永久性的產生在系統中,也就是這種修改寫到了資料庫中。

    事務機制保證一組資料的修改要麼全部執行,要麼全部不執行。SQL Server使用事務保證資料的一致性和確保在系統失敗時的可恢復性。事務是一個可以恢復的單元的工作,由一條或者多條Transact-SQL語句組成,可以影響到表中的一行或者多行資料。事務開啟以後,直到事務成功完成之後提交為止,或者到事務執行失敗全部取消或者滾回去為止。