程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle封鎖機制詳解

Oracle封鎖機制詳解

編輯:Oracle數據庫基礎
 

設立封鎖機制主要是為了對並發操作進行控制,對干擾進行封鎖,保證數據的一致性和准確性。Oracle數據庫封鎖方式有三種:共享封鎖,獨占封鎖,共享更新封鎖
  
  [b:8f4f63b9bb]封鎖類型[/b:8f4f63b9bb]
  
  Oracle RDBMS的封鎖類型可分為如下三類:
  
  1、內部級封鎖
  
  內部級封鎖是用於保護ORACLE內部結構,由系統內部實現,用戶不能訪問,因此我們不必對此做過多的了解。
  
  2、DDL級封鎖(字典/語法分析封鎖)
  
  DDL級封鎖也是由ORACLE RDBMS來控制,它用於保護數據字典和數據定義改變時的一致性和完整性。它是系統在對SQL定義語句作語法分析時自動地加鎖,無需用戶干予。字典/語法分析封鎖共分三類:
  
  (1)、字典操作鎖:用於對字典操作時,鎖住數據字典,此封鎖是獨占的,從而保護任何一個時刻僅能對一個字典操作。
  
  (2)、字典定義鎖:用於防止在進行字典操作時又進行語法分析,這樣可以避免在查詢字典的同時改動某個表的結構。
  
  (3)、表定義鎖:用於 一個SQL語句正當訪問某個表時,防止字典中與該表有關的項目被修改。
  
  3、DML級封鎖
  
  DML級封鎖用於控制並發事務中的數據操縱,保證數據的一致性和完整性,其封鎖對象可以是表或行。
  
  對用戶的數據操縱,Oracle可以自動為操縱的數據進行封鎖,但如果有操縱授權,則為滿足並發操縱的需要另外實施封鎖。DML封鎖可由一個用戶進程以顯式的方式加鎖,也可通過某些   SQL語句隱含方式實現。
  
  DML鎖有如下三種封鎖方式:
  
  (1)、共享封鎖方式(SHARE)
  
  (2)、獨占封鎖方式(EXCLUSIVE)
  
  (3)、共享更新封鎖(SHARE UPDATE)
  
  其中SHARE,EXCLUSIVE用於表封鎖,SHARE UPDATE用於行封鎖。
  
  1、共享方式的表封鎖
  
  共享方式的表封鎖是對表中的所有數據進行封鎖,該鎖用於保護查詢數據的一致性,防止其它用戶對已封鎖的表進行更更新。其它用戶只能對該表再施加共享方式的鎖,而不能再對該表施加獨占方式的封鎖,共享更新鎖可以再施加,但不允許持有共享更新封鎖的進程做更新。共享該表的所有用戶只能查詢表中的數據,但不能更新。共享方式的表封鎖只能由用戶用SQL語句來設置,基語句格式如下:
  
  [quote:04b72348bd]LOCK TABLE <表名>[,<表名>]...
  
  IN SHARE MODE [NOWAIT]
  
  [/quote:04b72348bd]
  
  執行該語句,對一個或多個表施加共享方式的表封鎖。當指定了選擇項NOWAIT,若該封鎖暫時不能施加成功,則返回並由用戶決定是進行等待,還是先去執行別的語句。
  
  持有共享鎖的事務,在出現如下之一的條件時,便釋放其共享鎖:
  
  A、執行COMMIT或ROLLBACK語句。
  
  B、退出數據庫(LOG OFF)。
  
  C、程序停止運行。
  
  共享方式表封鎖常用於一致性查詢過程,即在查詢數據期間表中的數據不發生改變。
  
  2、獨占方式表封鎖
  
  獨占方式表封鎖是用於封鎖表中的所有數據,擁有該獨占方式表封鎖的用戶,即可以查詢該表,又可以更新該表,其它的用戶不能再對該表施加任何封鎖(包括共享、獨占或共享更新封鎖)。其它用戶雖然不能更新該表,但可以查詢該表。
  
  獨占方式的表封鎖可通過如下的SQL語句來顯示地獲得:
  
  LOCK TABLE <表名>[,<表名>]....
  
  IN EXCLUSIVE MODE [NOWAIT]
  
  獨占方式的表封鎖也可以在用戶執行DML語句INSERT、UPDATE、DELETE時隱含獲得。
  
  擁有獨占方式表封鎖的事務,在出現如下條件之一時,便釋放該封鎖:
  
  (1)、執行COMMIT或ROLLBACK語句。
  
  (2)、退出數據庫(LOG OFF)
  
  (3)、程序停止運行。
  
  獨占方式封鎖通常用於更新數據,當某個更新事務涉及多個表時,可減少發生死鎖。
  
  DML鎖有如下三種封鎖方式:
  
  (1)、共享封鎖方式(SHARE)
  
  (2)、獨占封鎖方式(EXCLUSIVE)
  
  (3)、共享更新封鎖(SHARE UPDATE)
  
  其中SHARE,EXCLUSIVE用於表封鎖,SHARE UPDATE用於行封鎖。
  
  1、共享方式的表封鎖
  
  共享方式的表封鎖是對表中的所有數據進行封鎖,該鎖用於保護查詢數據的一致性,防止其它用戶對已封鎖的表進行更更新。其它用戶只能對該表再施加共享方式的鎖,而不能再對該表施加獨占方式的封鎖,共享更新鎖可以再施加,但不允許持有共享更新封鎖的進程做更新。共享該表的所有用戶只能查詢表中的數據,但不能更新。共享方式的表封鎖只能由用戶用SQL語句來設置,基語句格式如下:
  
  [quote:04b72348bd]LOCK TABLE <表名>[,<表名>]...
  
  IN SHARE MODE [NOWAIT]
  
  [/quote:04b72348bd]
  
  執行該語句,對一個或多個表施加共享方式的表封鎖。當指定了選擇項NOWAIT,若該封鎖暫時不能施加成功,則返回並由用戶決定是進行等待,還是先去執行別的語句。
  
  持有共享鎖的事務,在出現如下之一的條件時,便釋放其共享鎖:
  
  A、執行COMMIT或ROLLBACK語句。
  
  B、退出數據庫(LOG OFF)。
  
  C、程序停止運行。
  
  共享方式表封鎖常用於一致性查詢過程,即在查詢數據期間表中的數據不發生改變。
  
  2、獨占方式表封鎖
  
  獨占方式表封鎖是用於封鎖表中的所有數據,擁有該獨占方式表封鎖的用戶,即可以查詢該表,又可以更新該表,其它的用戶不能再對該表施加任何封鎖(包括共享、獨占或共享更新封鎖)。其它用戶雖然不能更新該表,但可以查詢該表。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved