oracle資料庫是現今資料庫領域應用最廣泛的,同時它也是乙個龐大的系統,全面了解它、玩轉它不但需要一定的理論知識,更需要開發經驗與工程經驗。本人是oracle一愛好者,以下是本人對oracle鎖的一些經驗,希望能與大家共同分享。
預備知識:
ddl(database definition language):資料庫定義語言,如create table、drop table.....oracle鎖具體分為以下幾類:dml(database modification language):資料庫修改語言,如insert、delete、update......
oracle8 tuning, release 8.0
1.按使用者與系統劃分,可以分為自動鎖與顯示鎖
自動鎖:當進行一項資料庫操作時,預設情況下,系統自動為此資料庫操作獲得所有有必要的鎖。
顯示鎖:某些情況下,需要使用者顯示的鎖定資料庫操作要用到的資料,才能使資料庫操作執行得更好,顯示鎖是使用者為資料庫物件設定的。
2.按鎖級別劃分,可分為共享鎖與排它鎖
共享鎖:共享鎖使乙個事務對特定資料庫資源進行共享訪問——另一事務也可對此資源進行訪問或獲得相同共享鎖。共享鎖為事務提供高併發性,但如拙劣的事務設計+共享鎖容易造成死鎖或資料更新丟失。
排它鎖:事務設定排它鎖後,該事務單獨獲得此資源,另一事務不能在此事務提交之前獲得相同物件的共享鎖或排它鎖。
3.按操作劃分,可分為dml鎖、ddl鎖
+dml鎖又可以分為,行鎖、表鎖、死鎖
-行鎖:當事務執行資料庫插入、更新、刪除操作時,該事務自動獲得操作表中操作行的排它鎖。
-表級鎖:當事務獲得行鎖後,此事務也將自動獲得該行的表鎖(共享鎖),以防止其它事務進行ddl語句影響記錄行的更新。事務也可以在進行過程中獲得共享鎖或排它鎖,只有當事務顯示使用lock table語句顯示的定義乙個排它鎖時,事務才會獲得表上的排它鎖,也可使用lock table顯示的定義乙個表級的共享鎖(lock table具體用法請參考相關文件)。
-死鎖:當兩個事務需要一組有衝突的鎖,而不能將事務繼續下去的話,就出現死鎖。
如事務1在表a行記錄#3中有一排它鎖,並等待事務2在表a中記錄#4中排它鎖的釋放,而事務2在表a記錄行#4中有一排它鎖,並等待事務1在表a中記錄#3中排它鎖的釋放,事務1與事務2彼此等待,因此就造成了死鎖。死鎖一般是因拙劣的事務設計而產生。
死鎖只能使用sql下:alter system kill session "sid,serial#";或者使用相關作業系統kill程序的命令,如unix下kill -9 sid,或者使用其它工具殺掉死鎖程序。
+ddl鎖又可以分為:排它ddl鎖、共享ddl鎖、分析鎖
-排它ddl鎖:建立、修改、刪除乙個資料庫物件的ddl語句獲得操作物件的 排它鎖。如使用alter table語句時,為了維護資料的完成性、一致性、合法性,該事務獲得一排它ddl鎖。
-共享ddl鎖:需在資料庫物件之間建立相互依賴關係的ddl語句通常需共享獲得ddl鎖。
如建立乙個包,該包中的過程與函式引用了不同的資料庫表,當編譯此包時,該事務就獲得了引用表的共享ddl鎖。
-分析鎖:oracle使用共享池儲存分析與優化過的sql語句及pl/sql程式,使執行相同語句的應用速度更快。乙個在共享池中快取的物件獲得它所引用資料庫物件的分析鎖。分析鎖是一種獨特的ddl鎖型別,oracle使用它追蹤共享池物件及它所引用資料庫物件之間的依賴關係。當乙個事務修改或刪除了共享池持有分析鎖的資料庫物件時,oracle使共享池中的物件作廢,下次在引用這條sql/plsql語句時,oracle重新分析編譯此語句。
4.內部閂鎖
內部閂鎖:這是oracle中的一種特殊鎖,用於順序訪問內部系統結構。當事務需向緩衝區寫入資訊時,為了使用此塊記憶體區域,oracle首先必須取得這塊記憶體區域的閂鎖,才能向此塊記憶體寫入資訊。
Postgresql鎖的簡單介紹
鎖主要是為了保持資料庫資料的一致性,可以阻止使用者修改一行或整個表,一般用在併發較高的資料庫中。在多個使用者非同步訪問資料庫時,如果不對其進行限制可能會出現讀取資料和儲存資料的不一致性。資料庫中有兩種基本的鎖 共享鎖 share 排它鎖 exclusive 如果資料物件加上排它鎖,則其他的事務不能對...
鎖類別的簡單介紹
對任何資料類的操作持悲觀的態度,認為任何資料操作都會發生執行緒不安全的現象。所以對每乙個操作都會加上悲觀鎖。悲觀鎖的實現往往依靠資料庫提供的鎖機制。任何資料操作在一般情況下是不會產生執行緒不安全的問題的,持樂觀的態度。其不會在資料操作前加鎖,這樣也就不會發生等待。樂觀鎖會在資料進行提交更新時再上鎖,...
分布式鎖簡單介紹
如下為簡單實現 介面定義 public inte ce distributedlock extends remoteobject介面實現 public class distributedlockimpl extends unicastremoteobject implements distribut...