鎖模式 | 鎖描述 | 解釋 | 對應操作 |
0 | none | ||
1 | NULL | SELECT | |
2
|
Row Share (RS)
|
行級共享鎖,其他對象只能查詢這些數據行
|
LOCK SHARE UPDATE
LOCK ROW SHARE
|
3 |
Row Exclusive Table Lock (RX)
|
行級排它鎖,在提交前不允許做DML操作 |
Insert、Update、Delete、 Select for update
|
4 |
Share Table Lock (S)
|
共享鎖,其他事務只能對它進行讀取,添加共享鎖,不能修改。
|
Create index、Lock share
|
5
|
Share Row Exclusive Table Lock (SRX)
|
共享行級排它鎖 |
Lock share row exclusive |
6
|
Exclusive Table Lock (X)
|
排它鎖,其他事務不能加任何鎖。
|
Alter table、Drop able、Drop index、Truncate table 、Lock exclusive |
例子:
1:用戶1對A表進行Update,沒有提交。
2:用戶2對B表進行Update,沒有提交。
此時雙反不存在資源共享的問題。
3:如果用戶2此時對A表作update,則會發生阻塞,需要等到用戶一的事物結束。
4:如果此時用戶1又對B表作update,則產生死鎖。此時Oracle會選擇其中一個用戶進行會滾,使另一個用戶繼續執行操作。
視圖名 | 描述 | 說明 |
V$LOCK | V$LOCK lists the locks currently held by the Oracle Database and outstanding requests for a lock or latch. | |
V$LOCKED_OBJECT | V$LOCKED_OBJECT 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. | 與V$LOCK的區別在於只列出TM鎖 |
V$LOCK_TYPE | V$LOCK_TYPE describes the type of locks available. |
|
v$session
|
V$SESSION displays session information for each current session.
|
|
v$sqltext
|
displays the text of SQL statements belonging to shared SQL cursors in the SGA.
|
列名 | 類型 | 字段說明 |
ADDR | RAW(4 | 8) | Address of lock state object |
KADDR | RAW(4|8) | Address of lock |
SID | NUMBER | 會話的sid,可以和v$session 關聯 |
TYPE | VARCHAR2(2) | 區分該鎖保護對象的類型(表4) TM – DML enqueue TX – Transaction enqueue UL – User supplied –我們主要關注TX和TM兩種類型的鎖 –UL鎖用戶自己定義的,一般很少會定義,基本不用關注 –其它均爲系統鎖,會很快自動釋放,不用關注 |
ID1 ID2 |
NUMBER | ID1,ID2的取值含義根據type的取值而有所不同 對於TM 鎖 ID1表示被鎖定表的object_id 可以和dba_objects視圖關聯取得具體表信息,ID2 值爲0 對於TX 鎖 ID1以十進制數值表示該事務所佔用的回滾段號和事務槽slot number號,其組形式: 0xRRRRSSSS,RRRR=RBS/UNDO NUMBER,SSSS=SLOT NUMBER ID2 以十進制數值表示環繞wrap的次數,即事務槽被重用的次數 |
LMODE | NUMBER |
|
REQUEST | NUMBER | 大於0時,表示當前會話被阻塞,其它會話佔有改鎖的模式 |
CTIME | NUMBER |
|
BLOCK | NUMBER |
|