Oracle中的鎖型別

charsi發表於2016-07-21
Oracle中的鎖型別主要分以下3種:
DML鎖(DML lock):DML 代表資料操縱語言(Data Manipulation Language)。一般來講,表示select,insert,update,merge和delete語句。DML鎖機制允許兵法之行資料修改。例如,DML鎖可能是特定資料行上的鎖,或者是鎖定表中所有行的表級鎖。
DDL鎖(DDL lock):DDL代表資料定義語言(Data Definition Language),如create和alter語句等。DDL鎖可以保護物件結構定義。
內部鎖和閂:Oracle使用這些鎖來保護其內部資料結構。例如,Oracle解析一個查詢並生成優化的查詢計劃時,它會把庫快取“臨時閂”,將計劃放在耐,以供其他繪畫使用。閂(latch)是Oracle採用的一種輕量級的低階序列化裝置,going 能上類似於鎖。閂是資料庫中導致競爭的一個常見原因。

下面我們主要看看DML鎖和DDL鎖。
DML鎖中主要為TX鎖和TM鎖。TX鎖為事務鎖,事務發起第一個修改時會得到TX鎖(事務鎖),而且會一直持有這個鎖,直至事務執行提交(commit)或回滾(rollback)。
TM(DML Enqueue)鎖用於確保在修改表的內容時,表的結構不會改變。例如,如果更新了一個表,會得到這個表的一個TM鎖。這會防止另一個使用者在該表上執行DROP或ALTER命令。如果表上有TM鎖,而另一個使用者試圖在這個表上執行DDL,就會得到一個ORA-00054的錯誤提示。
檢視TM鎖,可以直接檢視v$locked_object檢視,關於v$locked_object檢視,Oracle官方文件的解釋如下:
This view lists all locks acquired by every transaction on the system. It shows which sessions are holding DML locks (that is, TM-type enqueues) on what objects and in what mode.

TM鎖的型別:
0   none
1   NULL   Select 
2   SS(Row-S) 行級共享鎖,其他物件只能查詢這些資料行  Select for update、Lock for update、Lock row share
3   SX(Row-X) 行級排它鎖,在提交前不允許做DML操作 Insert、Update、Delete、Lock row share
4   S(Share)   共享鎖   Create index、Lock share 
5   SSX(S/Row-X)   共享行級排它鎖   Lock share row exclusive 
6   X(Exclusive)   排它鎖   Alter table、Drop table、Drop index、Truncate table 、Lock exclusive 


對於DDL鎖,可以在v$lock檢視中明顯看到,v$lock.lock_type=DL
0000000090D8F1F8 0000000090D8F250         34 TO      79833          1          3          0       1951          0
0000000090D8F738 0000000090D8F790         35 AE        100          0          4          0       3351          0
000000008F637248 000000008F6372C0         37 TX     458782       1359          6          0          2          0
0000000090D8F118 0000000090D8F170         37 AE        100          0          4          0       3345          0
00007FA09E881C20 00007FA09E881C80         37 TM      88590          0          4          0          2          0
0000000090D8E680 0000000090D8E6D8         37 DL      88590          0          3          0          2          0
0000000090D8E5A0 0000000090D8E5F8         37 DL      88590          0          3          0          2          0


ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00007FA09E881C20 00007FA09E881C80         37 TM         18          0          3          0          2          0


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23850820/viewspace-2122302/,如需轉載,請註明出處,否則將追究法律責任。

相關文章