事務和鎖是兩個聯絡非常緊密的概念。事務很重要,它可以保證多使用者併發系統中資料的完整性。在資料庫中,存在多個使用者同時對某一資料進行讀寫操作的情況,為了確保資料的併發性和一致性,可以使用事務。鎖是oracle資料庫引擎用來同步多個使用者,同時確保對同乙份數值快訪問的機制。鎖可以消除多使用者操作同乙個資源產生的隱患.
事務是在資料庫中主要用於保證資料完整性的一致性,防止出現錯誤資料。在資料庫中,資料的完整性是乙個廣義的概念,它包括資料的並行性和一致性。事務是單個的工作單元。
如果某一事務成功,則在該事務中進行的所有資料的修改均會提交,稱為資料庫中的永久組成部分。如果事務遇到錯誤必須取消或回滾,則所有的資料均會被清除。
oracle資料庫的事務基本控制語句如下:
事務的4個特性,原子性、一致性、分離性、永續性
原子性指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼什麼都不發生。
一致性事務必須使資料庫從乙個狀態變換到另乙個一致性狀態。
分離性即使每個事務都能保證一致性和原子性,但如果有幾個事務併發執行,如果在執行過程中發生了事務間的交叉,也會導致資料庫發生不一致的情況。
永續性指乙個事務一旦被提交,他對資料庫中資料的改變就是永續性的,接下來的其它操作和資料庫故障不應該對其有任何影響。
在oracle資料庫中,操作事務可以分為兩種方式:顯示操作方式和隱式管理方式。
對資料庫進行操作的事務共有5種狀態。
分分別為:獲得狀態,部分提交狀態,失敗狀態,提交狀態,終止狀態。
鎖是在事務訪問相同資源時,防止事務之間的有害**互的機制。這些資源包括使用者系統物件,記憶體和資料字典中的共享資料結構。oracle通過不同型別的鎖,來設定使用者允許或阻止其它使用者對相同資源的同時訪問,從而事項資料的完整性,並行性與一致性。在oracle資料庫中,多個事務併發執行的正確性由資料庫管理系統的併發控制機制提供支援。
資料庫系統的併發控制是以事務為單位進行的,而事務中用到的資料或資源,可以使用內部鎖定的機制來限制事務對所需共同資源的訪問操作,從而確保資料的併發性和一致性。
1、丟失資訊
2、未確認的相關性
3、不一致的分析
4、幻想讀
鎖是對資料進行併發控制的機制。oracle資料庫用它來同步多個使用者。黨對乙個資料來源加鎖後,此資料來源就有了一定的訪問機制。
oracle使用鎖來保證事務的隔離性,即事務內部的操作和使用的資料對併發執行的其它事務是隔離的,互補干擾的。
若oracle的事務要執行,必須先申請對該資源的鎖,按照獲得的鎖的不同,就能夠對該資源進行鎖賦予的操作。如果沒有獲得鎖,就不能執行對該資源的任何操作。當某個事務出現或該事務完成後,自動解除對資源的鎖。
oracle所有的鎖的管理和分配都是由資料庫管理系統自動完成的,不需要使用者進行干預,同時也提供了手工加鎖的命令,供有經驗的使用者使用。
鎖是實現併發訪問的重要手段,資料庫將自動啟用和取消鎖,不需要人的參與。按照鎖的許可權來分,oracle資料庫中存在兩種型別的鎖,分別是排他鎖(x鎖)和共享鎖(s鎖)
在oracle大型資料庫中,它利用不同型別的鎖來管理併發會話對資料物件的操作。oracle資料庫中的鎖按照所用物件的不同分為以下幾種型別。
在某些情況下,由於占用的資源不能i及時釋放,而造成鎖等待。鎖等待會嚴重影響資料庫的效能和日常工作。例如,當乙個會話修改表a的記錄時,它會對該記錄加鎖,而此時如果另乙個會話也來修改此記錄,那麼第二個會話因得不到排他鎖而一直等待,此時會出現執行sql時,資料庫長時間沒有響應的現象。直到第乙個會話把事務提交,釋放鎖,第二個會話才能對資料進行操作。
儘管死鎖不能完全避免。但是遵循特定的編碼慣例可以將發生死鎖的機會降到最低。一般而言,需要遵循以下原則:
事務保證了資料的一致性。而鎖和事務兩者緊密聯絡。重點是熟練掌握事務和鎖的含義及實現功能,難點是如何避免死鎖以及如何利用oem管理器解決鎖衝突。
oracel 鎖表查詢
以下幾個為相關表 select from v lock select from v sqlarea select from v session select from v process select from v locked object select from all objects sele...
ORACEL 中 事務執行過程
事務執行過程 1 伺服器程序拾取該事務所持有的sql語句到共享池中,查詢是否有包含該sql語句的共享sql區。如果有,則檢查該使用者是否有訪問所涉及的資料的許可權,如果有,則使用共享sql區來處理該sql語句。如果沒有找到共享sql區,則分配乙個新的sql區來分析 處理該sql語句。如果沒有許可權,...
事務和鎖 SQLite
2 事務 transaction 2.1 事務的週期 transaction lifecycles 程 序與事務之間有兩件事值得注意 1 哪些物件在事務下執行 這直接與api有關。2 事務的生命週期,即什麼時候開始,什麼時候結束以及它在什麼時候開始影響別的連線 這點對於併發性很重要 這涉及到sqli...