Oracle的鎖機制歸納總結

2021-08-30 05:54:52 字數 3882 閱讀 8019

鎖是防止在兩個事務操作同乙個資料來源(表或行)時互動破壞資料的一種機制。oracle採用封鎖技術保證併發操作的可序列性。oracle的鎖分為兩大類:資料鎖(也稱dml鎖)和字典鎖。字典鎖是oracle dbms內部用於對字典表的封鎖。字典鎖包括語法分析鎖和ddl鎖,由dbms在必要的時候自動加鎖和釋放鎖,使用者無機控制。

oracle主要提供了5種資料鎖:共享鎖(share table lock,簡稱s鎖)、排它鎖(exclusive table lock,簡稱x鎖)、行級鎖(row share table lock,簡稱rs鎖)、行級排它鎖(row exclusive table lock,簡稱rx鎖)和共享行級排它鎖(share row exclusive table lock,簡稱srx鎖)。其封鎖粒度包括行級和表級。

1. 共享鎖(share table lock,s):

加鎖語法:lock table tablename in share mode;

允許的操作:乙個共享鎖由乙個事務控制,僅允許其它事務查詢被鎖定的表。乙個有效的共享鎖明確地用select … for update形式鎖定行,或執行lock table tablename in share mode語法鎖定整個表,不允許被其它事務更新。允許多個事務在同乙個表上加共享鎖,這種情況下不允許在該錶上加鎖的事務更新表(即使有乙個事務控制的是形如select row … for update這樣行鎖也是不被允許的)。因此,僅有乙個事務的乙個共享鎖可以更新該錶如果其它事務也有相同的事務在該錶上的話。

禁止的操作:乙個共享鎖由乙個事務來控制,防止其它事務更新該錶或執行下面的語句:

lock table tablename in share row exclusive mode;

lock table tablename in row exclusive mode;

2. 排它鎖(exclusive table lock,x):

排它鎖是在鎖機制中限制最多的一種鎖型別,允許加排它鎖的事務獨自控制對錶的寫許可權。

加鎖語法:lock table tablename in exclusive mode;

允許的操作:在乙個表中只能有乙個事務對該錶實行排它鎖,排它鎖僅允許其它的事務查詢該錶。

禁止的操作:擁有排外鎖的事務禁止其它事務執行其它任何dml型別的語句或在該錶上加任何其它型別的鎖。

定義排它鎖的語法:

lock table tablename in exclusive mode;

3. 行級鎖(row share table lock,rs):

乙個行級鎖(有時稱為subshare table lock,簡稱ss,子共享鎖)需要該事務在被鎖定行的表上用update的形式加鎖。當有下面語句被執行的時候行級鎖自動加在操作的表上。

select . . . from tablename. . . for update of . . . ;

lock table tablename in row share mode;

行級鎖(row share table lock)在鎖型別中是限制最少的,也是在表的併發程度中使用程度最高的。

允許的操作:行級共享鎖由乙個事務控制,允許其它事務查詢、插入、更新、刪除或同時在同一張表上鎖定行。因此其它事務可以同時在同一張表上得到行級鎖、共享行級排它鎖、行級排它鎖、排它鎖。參見資料鎖的相容矩陣圖

禁止的操作:擁有行級鎖的事務不允許其它事務執行排它鎖,即:

lock table tablename in exclusive mode;

4. 行級排它鎖(row exclusive table lock,rx):

行級排它鎖(亦稱為subexclusive table lock,簡稱sx,子排它鎖)通常需要事務擁有的鎖在表上被更新一行或多行。當有下面語句被執行的時候行級排它鎖被加在操作的表上。

insert into tablename. . . ;

update tablename. . . ;

delete from tablename. . . ;

lock table tablename in row exclusive mode;

行級排它鎖比行級鎖稍微多一些限制。

允許的操作:在資料鎖的相容矩陣圖很容易看出行級排它鎖由乙個事務擁有允許其它事務執行查詢、修改、插入、刪除或同時在同一張表上鎖定行。執有行級排它鎖的事務允許其它事務在同一張表上同時得到共享鎖和行級排它鎖。

禁止的操作:行級排它鎖由乙個事務擁有防止其它事務手動鎖定表來排除其它事務的讀寫權。因此,其它事務不允許在同一張表上使用以下的語句來執行鎖事務。

lock table table in share mode;

lock table table in share exclusive mode;

lock table table in exclusive mode

5. 共享行級排它鎖(share row exclusive table lock,srx):

lock table tablename in share row exclusive mode;

允許的操作:僅允許乙個事務在某一時刻得到行級排它鎖。擁有行級排它鎖事務允許其它事務在被鎖定的表上執行查詢或使用select … from tablename for update…來準確在鎖定行而不能更新行。

禁止的操作:擁有行級排它鎖的事務不允許其它事務有除共享鎖外的其它形式的鎖加在同一張表上或更新該錶。即下面的語句是不被允許的:

lock table tablename in share mode;

lock table tablename in share row exclusive mode;

lock table tablename in row exclusive mode;

lock table tablename in exclusive mode;

dml語句獲得的dml自動鎖(oracle隱含鎖)

dml自動鎖的相容矩陣圖:

x:排它鎖、rs:行級共享鎖、rx:行級排它鎖、s、共享鎖、rsx:行級共享排它鎖

dml語句 有行級鎖 鎖型別

select ... from table

insert into table ... x rx

update table ... x rx

delete from table ... x rx

select ... from table ... for update of ... x rs

lock table table in ...

row share mode rs

row exclusive mode rx

share mode s

share exclusive mode srx

exclusive mode x

資料字典中與鎖有關的表或檢視

v_$locked_object

v_$locks_with_collisions

v_$lock_activity

v_$lock_element

v_$_lock

dbms_lock

v$dlm_all_locks

v$dlm_locks

v$enqueue_lock

v$global_blocked_locks

v$lock

v$locked_object

v$locks_with_collisions

v$lock_activity

v$lock_element

v$_lock

解鎖及kill session:

使用下面的語法查出鎖並殺掉session。

select a.sid,a.serial#,a.username,b.type from v$session a,v$lock b where a.sid=b.sid;

alter system kill session 'sid,serial#';

Oracle的鎖機制歸納總結

鎖是防止在兩個事務操作同乙個資料來源 表或行 時互動破壞資料的一種機制。oracle採用封鎖技術保證併發操作的可序列性。oracle的鎖分為兩大 類 資料鎖 也稱dml鎖 和字典鎖。字典鎖是oracle dbms內部用於對字典表的封鎖。字典鎖包括語法分析鎖和ddl鎖,由dbms在必要的時候自動加鎖和...

python 各種鎖機制歸納整理

q 為什麼要用鎖?什麼樣的業務場景下需要用鎖?就拿之前的工單系統來說,當審批方式為角色組審批時,代表該角色組內任意一人審批即可,這時,該角色組內成員的系統上都是可以顯示審批按鈕,如果此時a審批員和b審批員都同時審批了同一工單,有可能會出現不一樣的審批結果,即使審批意見是一致的,多人操作也會增加對資料...

ORACLE的鎖機制

設立封鎖機制主要是為了對併發操作進行控制,對干擾進行封鎖,保證資料的一致性和準確性。oracle資料庫封鎖方式有三種 共享封鎖,獨佔封鎖,共享更新封鎖 oracle rdbms的封鎖型別可分為如下三類 內部級封鎖 內部級封鎖是用於保護oracle內部結構,由系統內部實現,使用者不能訪問,因此我們不必...