Oracle中V$LOCK 視圖的使用小結(jié)
V$LOCK 是 Oracle 數(shù)據(jù)庫中最重要的動態(tài)性能視圖之一,用于顯示當前數(shù)據(jù)庫中鎖的持有和等待情況。
一、V$LOCK 視圖結(jié)構(gòu)
| 列名 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
| SID | NUMBER | 持有或等待鎖的會話標識符 |
| TYPE | VARCHAR2(2) | 鎖類型標識符 |
| ID1 | NUMBER | 鎖標識符1(含義取決于鎖類型) |
| ID2 | NUMBER | 鎖標識符2(含義取決于鎖類型) |
| LMODE | NUMBER | 鎖模式(當前持有的模式) |
| REQUEST | NUMBER | 請求的鎖模式 |
| CTIME | NUMBER | 鎖已持有或等待的時間(秒) |
| BLOCK | NUMBER | 是否阻塞其他會話(1=阻塞,0=不阻塞) |
二、主要鎖類型(TYPE字段)
1. 基本鎖類型
| 類型 | 描述 |
|---|---|
| TX | 事務鎖(行級鎖) |
| TM | DML鎖(表級鎖) |
| UL | 用戶自定義鎖(DBMS_LOCK創(chuàng)建) |
2. 系統(tǒng)級鎖類型
| 類型 | 描述 |
|---|---|
| ST | 空間事務鎖 |
| TT | 臨時表鎖 |
| SQ | 序列鎖 |
| CF | 控制文件鎖 |
三、鎖模式(LMODE/REQUEST)
Oracle 鎖模式數(shù)值定義:
| 值 | 鎖模式 | 描述 |
|---|---|---|
| 0 | None | 無鎖 |
| 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 鎖(事務鎖)
- ID1:Undo 段號 + 事務槽號(USN.SLT)
- ID2:事務序列號(WRAP)
2. TM 鎖(表鎖)
- ID1:被鎖定對象的 OBJECT_ID
- ID2:通常為 0
3. UL 鎖(用戶鎖)
- ID1:DBMS_LOCK.ALLOCATE_UNIQUE 分配的鎖ID
- ID2:通常為 0
五、實用查詢示例
1. 查看所有鎖信息
SELECT * FROM v$lock ORDER BY ctime DESC;
2. 查找阻塞會話
SELECT
l1.sid AS "阻塞會話ID",
s1.username AS "阻塞用戶",
s1.osuser AS "阻塞OS用戶",
s1.machine AS "阻塞機器",
l2.sid AS "被阻塞會話ID",
s2.username AS "被阻塞用戶",
l1.type AS "鎖類型",
DECODE(l1.type,
'TX', '事務鎖',
'TM', '表鎖',
'UL', '用戶鎖',
l1.type) AS "鎖描述",
l1.ctime AS "持有時間(秒)"
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. 查詢特定對象的鎖
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';
六、鎖診斷與問題解決
1. 常見鎖問題
- TX鎖等待:最常見的事務沖突
- TM鎖沖突:DDL與DML操作沖突
- 死鎖:ORA-00060錯誤
2. 解鎖方法
-- 1. 查找阻塞會話 SELECT sid, serial#, username FROM v$session WHERE sid IN (SELECT blocking_session FROM v$session WHERE blocking_session IS NOT NULL); -- 2. 終止會話 ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
V$LOCK 視圖是診斷 Oracle 鎖問題的關(guān)鍵工具,結(jié)合 V$SESSION 和 V$LOCKED_OBJECT 等視圖可以全面分析鎖情況。
到此這篇關(guān)于Oracle中V$LOCK 視圖的使用小結(jié)的文章就介紹到這了,更多相關(guān)Oracle V$LOCK 視圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle中 lsnrctl命令使用總結(jié)(推薦)
這篇文章主要介紹了Oracle lsnrctl命令使用總結(jié) ,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03
oracle查看字符集后修改oracle服務端和客戶端字符集的步驟
本文介紹了oracle server端查詢字符集后,修改oracle服務端和客戶端字符集的步驟,大家參考使用吧2014-01-01
Oracle數(shù)據(jù)庫opatch補丁操作流程
這篇文章主要介紹了Oracle數(shù)據(jù)庫opatch補丁操作流程的相關(guān)資料,本文從升級前準備工作到安裝補丁操作整理過程都介紹的非常詳細,需要的朋友可以參考下2016-10-10
oracle復制表結(jié)構(gòu)和復制表數(shù)據(jù)語句分享
這篇文章主要介紹了oracle復制表結(jié)構(gòu)和復制表數(shù)據(jù)的語句,大家直接使用就可以了2014-03-03
Oracle數(shù)據(jù)庫中表空間的基本管理操作小結(jié)
這篇文章主要介紹了Oracle數(shù)據(jù)庫中表空間的基本管理方法小結(jié),包括創(chuàng)建表空間和獲取表空間大小等的操作命令,需要的朋友可以參考下2015-12-12

