Oracle學習筆記(一)——併發與鎖

1 併發數據庫

多用戶數據庫管理系統的一個主要任務是對 併發(concurrency)進行控制,即對多個用戶同時訪問同一數據進行控制。當缺少有效的併發控制時,修改數據的操做就不能保證正常,從而危害數據完整性。管理數據併發的方法是讓每一個用戶輪流操做數據。而數據庫管理系統的目標就是減小每一個用戶的等待時間,即讓用戶無需等待或使等待難以察覺。服務器

爲保證數據庫性能,Oracle 應用了不一樣類型的鎖和多版本數據完整性模型(multiversion consistency model)。這些特性都包含在事務(transaction)的概念裏。應用程序開發人員應該在設計事務時充分發揮其中的併發、完整性等特性。併發

1.1 讀一致性函數

Oracle 提供的讀完整性包含如下特性:性能

  • 保證在一個時間點上,用戶經過查詢語句獲得的數據是一致的,且語句執行期間數據不會改變(語句級的讀完整性)
  • 保證數據庫中讀數據的用戶無需等待正在讀或寫相同數據的用戶
  • 保證數據庫中寫數據的用戶無需等待正在讀相同數據的用戶
  • 保證在併發事務中寫數據的用戶只需等待正在寫相同數據行的用戶

事務是 Oracle 實現讀完整性的關鍵。事務是一組 SQL 語句(這組語句或者被一塊兒提交,或者都不被提交),事務的做用是:設計

  • 決定了爲查詢用戶生成的保持讀完整性的視圖的起始點
  • 控制着被一個事務修改過的數據什麼時候能夠被數據庫中其它進行讀寫操做的事務看到

*只讀事務對象

默認狀況下,Oracle 只保證語句級的讀完整性。由一個查詢返回的數據對同一時間點來講是一致的。可是在有些狀況下,用戶可能須要事務級的讀完整性。也就是要使一個事務中的多個查詢對同一時間點來講都是一致的,這樣事務中的每一個查詢都不會受到與之衝突的事務的干擾。若是用戶須要對多個表作多個查詢,建議使用只讀事務。同理,方法(函數)級的事務控制策略至少應該支持只讀事務。事務

2 各類鎖機制開發

Oracle 也使用 鎖(lock)來控制對數據的併發訪問。當更新數據時,數據庫服務器鎖定被修改的數據直到此更新被提交。在這期間,任何用戶都不能修改被鎖定的數據。這保證了系統的數據完整性。io

Oracle 鎖定數據的操做無需用戶干預,可以自動執行。當一個 SQL 執行時,Oracle 根據實際狀況的須要,隱式地對數據加鎖。Oracle 的鎖管理器自動地在行級對錶數據加鎖,所以對相同的數據競爭能夠最小化。

2.1 共享鎖(S鎖)

若事務T對數據對象A加上S鎖,則事務T能夠讀A但不能修改A,其餘事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。

2.2 排他鎖(X鎖)

若事務T對數據對象A加上X鎖,事務T能夠讀A也能夠修改A,其餘事務不能再對A加任何鎖,直到T釋放A上的鎖。

2.3 有關共享鎖和排他鎖的解釋

鎖機制的基本操做是事務T在操做數據對象A時,其餘事務不能繼續對A操做,直到T完成。若容許其餘事務對數據A可讀屬於共享鎖,不可讀屬於排他鎖。

 

擴展閱讀:

1.事務隔離級別

2.Spring事務傳播機制

相關文章
相關標籤/搜索