標籤:程式設計 悲觀鎖 ora 淺析 mysql control 問題: 錯誤 介紹
註明: 本文轉載自http://www.hollischuang.com/archives/898
資料庫的讀現象淺析中介紹過,在並發訪問情況下,可能會出現髒讀、不可重複讀取和幻讀等讀現象,為了應對這些問題,主流資料庫都提供了鎖機制,並引入了交易隔離等級的概念。
並發控制
在電腦科學,特別是程式設計、作業系統、多處理機和資料庫等領域,並發控制(Concurrency control)是確保及時糾正由並行作業導致的錯誤的一種機制。
資料庫管理系統(DBMS)中的並發控制的任務是確保在多個事務同時存取資料庫中同一資料時不破壞事務的隔離性和統一性以及資料庫的統一性。下面舉例說明並行作業帶來的資料不一致性問題:
現有兩處火車票售票點,同時讀取某一趟列車車票資料庫中車票餘額為 X。兩處售票點同時賣出一張車票,同時修改餘額為 X -1寫回資料庫,這樣就造成了實際賣出兩張火車票而資料庫中的記錄卻只少了一張。 產生這種情況的原因是因為兩個事務讀入同一資料並同時修改,其中一個事務提交的結果破壞了另一個事務提交的結果,導致其資料的修改被丟失,破壞了事務的隔離性。並發控制要解決的就是這類問題。
封鎖、時間戳記、開放式並行存取控制(樂觀鎖)和封閉式並行存取控制(悲觀鎖)是並發控制主要採用的技術手段。
鎖
當並發事務同時訪問一個資源時,有可能導致資料不一致,因此需要一種機制來將資料訪問順序化,以保證資料庫資料的一致性。鎖就是其中的一種機制。
在電腦科學中,鎖是在執行多線程時用於強行限制資源訪問的同步機制,即用於在並發控制中保證對互斥要求的滿足。
鎖的分類(oracle)
一、按操作劃分,可分為DML鎖、DDL鎖
二、按鎖的粒度劃分,可分為表級鎖, 頁級鎖, 行級鎖(mysql)
三、按鎖層級劃分,可分為共用鎖定、排它鎖
四、按加鎖方式劃分,可分為自動鎖、顯示鎖
五、按使用方式劃分,可分為樂觀鎖, 悲觀鎖
DML鎖(data locks,資料鎖),用於保護資料的完整性,其中包括行級鎖(Row Locks (TX鎖))、表級鎖(table lock(TM鎖))。 DDL鎖(dictionary locks,資料字典鎖),用於保護資料庫物件的結構,如表、索引等的結構定義。其中包排他DDL鎖(Exclusive DDL lock)、共用DDL鎖(Share DDL lock)、可中斷解析鎖(Breakable parse locks)
[資料庫事務與鎖]詳解四: 資料庫的鎖機制