Oracle中的鎖型別
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
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server中的鎖型別及用法SQLServer型別
- MySQL 中的鎖有哪些型別,MySQL 中加鎖的原則MySql型別
- Oracle中的TIMESTAMP型別Oracle型別
- zt_oracle lock type鎖型別詳解Oracle型別
- oracle資料庫事務transaction 不同的鎖lock型別Oracle資料庫型別
- Oracle中的鎖Oracle
- Oracle中的TIMESTAMP資料型別Oracle資料型別
- Oracle中number型別詳解Oracle型別
- Oracle中date型別使用注意Oracle型別
- 關於oracle中的sql資料型別OracleSQL資料型別
- ORACLE 9I 中的日期格式型別Oracle型別
- 確定enqueue鎖型別ENQ型別
- Oracle中Clob型別處理解析Oracle型別
- InnoDB儲存引擎鎖機制(二、 鎖的型別)儲存引擎型別
- oracle中date資料型別與timestamp資料型別的轉換Oracle資料型別
- 聊聊Oracle 11g中的char型別使用Oracle型別
- Mysql中S 鎖和 X 鎖的區別MySql
- oracle中的鎖機制Oracle
- ts 中的型別型別
- 9i,enqueue,ORACLE鎖爭用 檢視爭用型別ENQOracle型別
- oracle的欄位型別Oracle型別
- ORACLE中的隱式資料型別轉換(一)Oracle資料型別
- ORACLE日期型別Oracle型別
- Oracle 中LONG RAW BLOB CLOB型別介紹Oracle型別
- oracle將表中date資料型別修改為timestamp資料型別Oracle資料型別
- 處理Oracle Session中的鎖OracleSession
- javaScript中的Array型別JavaScript型別
- Java中的型別提升Java型別
- Swift 中的值型別與引用型別使用指北Swift型別
- 在ASP中讀取ORACLE中的BLOB型別的欄位的值,不用Oracle Object for Object (轉)Oracle型別Object
- Oracle的number資料型別Oracle資料型別
- 避免使用Oracle的char型別Oracle型別
- Oracle的raw資料型別Oracle資料型別
- oracle的timestamp型別使用Oracle型別
- Oracle型別的建立及使用Oracle型別
- ORACLE的資料型別(轉)Oracle資料型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- Oracle Long型別轉換為Clob型別Oracle型別