![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuQmYwUDN2EmZxgDN4MWO0kDN1EjN3IDMllTZ2UjN1MDNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
一、摘要
Oracle的手冊上關于鎖的分類說明如下:
1. DML鎖:Date
lock。執行DML時保護資料的鎖。Row
Lock(TX)保護特定行,Table
Lock(TM)保護整個表,可以通過dba_kml_locks觀察。
2. DDL鎖:Data
dictionary lock。保護User/Table/View/Procedure等定義,可以通過dba_ddl_locks觀察。
實際上,DML鎖和DDL鎖隻是為了合理配置設定鎖而賦予的名稱,請注意這點。
DML鎖實際上與TM鎖一緻,DML鎖可以通過dba_dml_locks視圖觀察,這個視圖的作用是從V$lock視圖上篩選出鎖類型為TM的。
資料庫上允許的TM鎖數量,可以利用DML_LOCKS參數指定。若将DML_LOCKS參數設定為0,則對表無法獲得TM鎖。
這時,oracle為了保障表定義被保護,對于表根本上不允許DDL操作。
是以,即便不獲得TM鎖,也允許修改該表的特定行。
如OPS環境下,為了減少在全局範圍内獲得TM鎖過程中發生的附加資源消耗,有時也将DML_LOCKS值修改為0。
DDL鎖實際上與library
cache lock 一緻。
DDL鎖可以通過DBA_DDL_LOCKS視圖觀察,這個視圖世界上起到加工X$KGLLK視圖後顯示的作用。
DDL鎖除了DBA_DDL_LOCKS視圖之外,還可以通過X$KGLLK,DBA_KGLLOCK等視圖觀察。
對于表,普通DML語句以Sub-Exclusive(SX)模式獲得TM鎖。Sub-exclusive模式之間存在共享性,是以多個會話可以對形同的表執行DML。
已執行DML的會話對于表,以Sub-Exclusive莫侯斯獲得TM鎖,對于已修改的資料Exclusive模式獲得TX鎖。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuQmYwUDN2EmZxgDN4MWO0kDN1EjN3IDMllTZ2UjN1MDNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
二、監控DDL和DML鎖
1. DBA_DML_LOCKS視圖在v$locks視圖上隻選出TM鎖并加工得到的;
2. DBA_DDL_LOCKS視圖是加工X$KGLLK視圖得到的;
Thanks and Regards
2016-03-25 Created By BaoXinjian
<a href="http://www.wiz.cn/i/3d838de3">來自為知筆記(Wiz)</a>
<b>ERP技術讨論群: 288307890</b>
<b>技術交流,技術讨論,歡迎加入</b>
<b>Technology Blog Created By Oracle ERP - 鮑建立</b>