Oracel:事務和鎖

事務和鎖是兩個聯繫非常緊密的概念。事務很重要,它可以保證多用戶併發系統中數據的完整性。在數據庫中,存在多個用戶同時對某一數據進行讀寫操作的情況,爲了確保數據的併發性和一致性,可以使用事務。鎖是Oracle數據庫引擎用來同步多個用戶,同時確保對同一份數值快訪問的機制。鎖可以消除多用戶操作同一個資源產生的隱患.

什麼是事務

事務是在數據庫中主要用於保證數據完整性的一致性,防止出現錯誤數據。在數據庫中,數據的完整性是一個廣義的概念,它包括數據的並行性和一致性。事務是單個的工作單元。
如果某一事務成功,則在該事務中進行的所有數據的修改均會提交,稱爲數據庫中的永久組成部分。如果事務遇到錯誤必須取消或回滾,則所有的數據均會被清除。
Oracle數據庫的事務基本控制語句如下:

  • set transaction:設置事務的屬性
  • commit:提交事務
  • savepoint:設置保存點
  • rollback:回滾事務
  • rollback to savepoint:回滾至保存點

事務的ACID特性

事務的4個特性,原子性、一致性、分離性、持久性
原子性指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼什麼都不發生。
一致性事務必須使數據庫從一個狀態變換到另一個一致性狀態。
分離性即使每個事務都能保證一致性和原子性,但如果有幾個事務併發執行,如果在執行過程中發生了事務間的交叉,也會導致數據庫發生不一致的情況。
持久性指一個事務一旦被提交,他對數據庫中數據的改變就是持久性的,接下來的其它操作和數據庫故障不應該對其有任何影響。

事務類型

在Oracle數據庫中,操作事務可以分爲兩種方式:顯示操作方式和隱式管理方式。

事務的狀態

對數據庫進行操作的事務共有5種狀態。
分分別爲:獲得狀態,部分提交狀態,失敗狀態,提交狀態,終止狀態。

鎖是在事務訪問相同資源時,防止事務之間的有害性交互的機制。這些資源包括用戶系統對象,內存和數據字典中的共享數據結構。Oracle通過不同類型的鎖,來設置用戶允許或阻止其它用戶對相同資源的同時訪問,從而事項數據的完整性,並行性與一致性。在Oracle數據庫中,多個事務併發執行的正確性由數據庫管理系統的併發控制機制提供支持。

併發訪問的常見問題

數據庫系統的併發控制是以事務爲單位進行的,而事務中用到的數據或資源,可以使用內部鎖定的機制來限制事務對所需共同資源的存取操作,從而確保數據的併發性和一致性。
1、丟失信息
2、未確認的相關性
3、不一致的分析
4、幻想讀

鎖概述

鎖是對數據進行併發控制的機制。Oracle數據庫用它來同步多個用戶。黨對一個數據源加鎖後,此數據源就有了一定的訪問機制。
Oracle使用鎖來保證事務的隔離性,即事務內部的操作和使用的數據對併發執行的其它事務是隔離的,互補干擾的。
若Oracle的事務要執行,必須先申請對該資源的鎖,按照獲得的鎖的不同,就能夠對該資源進行鎖賦予的操作。如果沒有獲得鎖,就不能執行對該資源的任何操作。當某個事務出現或該事務完成後,自動解除對資源的鎖。
Oracle所有的鎖的管理和分配都是由數據庫管理系統自動完成的,不需要用戶進行干預,同時也提供了手工加鎖的命令,供有經驗的用戶使用。

鎖分類

鎖是實現併發訪問的重要手段,數據庫將自動啓用和取消鎖,不需要人的參與。按照鎖的權限來分,Oracle數據庫中存在兩種類型的鎖,分別是排他鎖(X鎖)和共享鎖(S鎖)

  • 排他鎖:被稱爲寫鎖,該模式下的鎖可以防止資源的共享。當進行是數據修改時,會啓用該類型的鎖。
  • 共享鎖:被稱爲讀鎖,該模式下的鎖鎖定的數據只能被讀取,不能被修改。加了共享鎖的記錄允許被併發地讀取。

在Oracle大型數據庫中,它利用不同類型的鎖來管理併發會話對數據對象的操作。Oracle數據庫中的鎖按照所用對象的不同分爲以下幾種類型。

  • DML鎖:用來保護數據的完整性,稱爲數據鎖。DML鎖分爲行級鎖(TX)和表級鎖(TM)。行級鎖(TX)也屬於排他鎖。
  • DDL鎖:可以保護模式中對象的結構
  • 內部閆鎖:保護數據庫的內部結構,完全自動調用。

鎖等待和死鎖

在某些情況下,由於佔用的資源不能i及時釋放,而造成鎖等待。鎖等待會嚴重影響數據庫的性能和日常工作。例如,當一個會話修改表A的記錄時,它會對該記錄加鎖,而此時如果另一個會話也來修改此記錄,那麼第二個會話因得不到排他鎖而一直等待,此時會出現執行SQL時,數據庫長時間沒有響應的現象。直到第一個會話把事務提交,釋放鎖,第二個會話才能對數據進行操作。

預防死鎖

儘管死鎖不能完全避免。但是遵循特定的編碼慣例可以將發生死鎖的機會降到最低。一般而言,需要遵循以下原則:

  • 按同一順序訪問對象
  • 避免事務中的用戶交互
  • 保持事務簡短並處於一個批處理中

總結

事務保證了數據的一致性。而鎖和事務兩者緊密聯繫。重點是熟練掌握事務和鎖的含義及實現功能,難點是如何避免死鎖以及如何利用OEM管理器解決鎖衝突。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章