Oracle中V$LOCK 視圖的使用小結(jié)
V$LOCK 是 Oracle 數(shù)據(jù)庫(kù)中最重要的動(dòng)態(tài)性能視圖之一,用于顯示當(dāng)前數(shù)據(jù)庫(kù)中鎖的持有和等待情況。
一、V$LOCK 視圖結(jié)構(gòu)
列名 | 數(shù)據(jù)類型 | 描述 |
---|---|---|
SID | NUMBER | 持有或等待鎖的會(huì)話標(biāo)識(shí)符 |
TYPE | VARCHAR2(2) | 鎖類型標(biāo)識(shí)符 |
ID1 | NUMBER | 鎖標(biāo)識(shí)符1(含義取決于鎖類型) |
ID2 | NUMBER | 鎖標(biāo)識(shí)符2(含義取決于鎖類型) |
LMODE | NUMBER | 鎖模式(當(dāng)前持有的模式) |
REQUEST | NUMBER | 請(qǐng)求的鎖模式 |
CTIME | NUMBER | 鎖已持有或等待的時(shí)間(秒) |
BLOCK | NUMBER | 是否阻塞其他會(huì)話(1=阻塞,0=不阻塞) |
二、主要鎖類型(TYPE字段)
1. 基本鎖類型
類型 | 描述 |
---|---|
TX | 事務(wù)鎖(行級(jí)鎖) |
TM | DML鎖(表級(jí)鎖) |
UL | 用戶自定義鎖(DBMS_LOCK創(chuàng)建) |
2. 系統(tǒng)級(jí)鎖類型
類型 | 描述 |
---|---|
ST | 空間事務(wù)鎖 |
TT | 臨時(shí)表鎖 |
SQ | 序列鎖 |
CF | 控制文件鎖 |
三、鎖模式(LMODE/REQUEST)
Oracle 鎖模式數(shù)值定義:
值 | 鎖模式 | 描述 |
---|---|---|
0 | None | 無(wú)鎖 |
1 | Null (N) | 空模式 |
2 | Row-S (SS) | 行共享 |
3 | Row-X (SX) | 行排他 |
4 | Share (S) | 共享 |
5 | S/Row-X (SSX) | 共享行排他 |
6 | Exclusive (X) | 排他 |
四、ID1 和 ID2 的含義
1. TX 鎖(事務(wù)鎖)
- ID1:Undo 段號(hào) + 事務(wù)槽號(hào)(USN.SLT)
- ID2:事務(wù)序列號(hào)(WRAP)
2. TM 鎖(表鎖)
- ID1:被鎖定對(duì)象的 OBJECT_ID
- ID2:通常為 0
3. UL 鎖(用戶鎖)
- ID1:DBMS_LOCK.ALLOCATE_UNIQUE 分配的鎖ID
- ID2:通常為 0
五、實(shí)用查詢示例
1. 查看所有鎖信息
SELECT * FROM v$lock ORDER BY ctime DESC;
2. 查找阻塞會(huì)話
SELECT l1.sid AS "阻塞會(huì)話ID", s1.username AS "阻塞用戶", s1.osuser AS "阻塞OS用戶", s1.machine AS "阻塞機(jī)器", l2.sid AS "被阻塞會(huì)話ID", s2.username AS "被阻塞用戶", l1.type AS "鎖類型", DECODE(l1.type, 'TX', '事務(wù)鎖', 'TM', '表鎖', 'UL', '用戶鎖', l1.type) AS "鎖描述", l1.ctime AS "持有時(shí)間(秒)" FROM v$lock l1, v$lock l2, v$session s1, v$session s2 WHERE l1.block = 1 AND l2.request > 0 AND l1.id1 = l2.id1 AND l1.id2 = l2.id2 AND l1.sid = s1.sid AND l2.sid = s2.sid;
3. 查詢特定對(duì)象的鎖
SELECT l.sid, s.username, s.status, l.type, l.lmode, l.ctime, o.object_name FROM v$lock l, dba_objects o, v$session s WHERE l.id1 = o.object_id(+) AND l.type = 'TM' AND l.sid = s.sid AND o.object_name = 'EMPLOYEES';
六、鎖診斷與問(wèn)題解決
1. 常見(jiàn)鎖問(wèn)題
- TX鎖等待:最常見(jiàn)的事務(wù)沖突
- TM鎖沖突:DDL與DML操作沖突
- 死鎖:ORA-00060錯(cuò)誤
2. 解鎖方法
-- 1. 查找阻塞會(huì)話 SELECT sid, serial#, username FROM v$session WHERE sid IN (SELECT blocking_session FROM v$session WHERE blocking_session IS NOT NULL); -- 2. 終止會(huì)話 ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
V$LOCK 視圖是診斷 Oracle 鎖問(wèn)題的關(guān)鍵工具,結(jié)合 V$SESSION 和 V$LOCKED_OBJECT 等視圖可以全面分析鎖情況。
到此這篇關(guān)于Oracle中V$LOCK 視圖的使用小結(jié)的文章就介紹到這了,更多相關(guān)Oracle V$LOCK 視圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Oracle普通視圖和物化視圖的區(qū)別及說(shuō)明
- Oracle視圖的創(chuàng)建、使用以及刪除操作方法大全
- OB Oracle系統(tǒng)視圖權(quán)限導(dǎo)致的故障解決案例
- Oracle動(dòng)態(tài)視圖v$active_session_history實(shí)戰(zhàn)示例
- Oracle學(xué)習(xí)筆記之視圖及索引的使用
- Oracle創(chuàng)建帶有參數(shù)的視圖代碼介紹
- Oracle Scott創(chuàng)建視圖權(quán)限不足解決辦法
- oracle 視圖權(quán)限 oracle 創(chuàng)建視圖權(quán)限不足
- oracle中的視圖詳解
相關(guān)文章
Oracle中 lsnrctl命令使用總結(jié)(推薦)
這篇文章主要介紹了Oracle lsnrctl命令使用總結(jié) ,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03oracle查看字符集后修改oracle服務(wù)端和客戶端字符集的步驟
本文介紹了oracle server端查詢字符集后,修改oracle服務(wù)端和客戶端字符集的步驟,大家參考使用吧2014-01-01Oracle數(shù)據(jù)庫(kù)opatch補(bǔ)丁操作流程
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)opatch補(bǔ)丁操作流程的相關(guān)資料,本文從升級(jí)前準(zhǔn)備工作到安裝補(bǔ)丁操作整理過(guò)程都介紹的非常詳細(xì),需要的朋友可以參考下2016-10-10Oracle使用like查詢時(shí)對(duì)下劃線的處理方法
這篇文章主要介紹了Oracle使用like查詢時(shí)對(duì)下劃線的處理方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03oracle復(fù)制表結(jié)構(gòu)和復(fù)制表數(shù)據(jù)語(yǔ)句分享
這篇文章主要介紹了oracle復(fù)制表結(jié)構(gòu)和復(fù)制表數(shù)據(jù)的語(yǔ)句,大家直接使用就可以了2014-03-03ORACLE應(yīng)用經(jīng)驗(yàn)(1)
ORACLE應(yīng)用經(jīng)驗(yàn)(1)...2007-03-03Oracle數(shù)據(jù)庫(kù)中表空間的基本管理操作小結(jié)
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)中表空間的基本管理方法小結(jié),包括創(chuàng)建表空間和獲取表空間大小等的操作命令,需要的朋友可以參考下2015-12-12