oracle資料庫檢視鎖表的sql語句整理

达摩院的BLOG發表於2024-12-08

一、關鍵表

V$LOCKED_OBJECT :記錄鎖資訊的表
v$session :記錄會話資訊的表
v$sql:記錄執行sql的表
dba_objects:用來管理物件(表、庫等等物件)

二、相關查詢

1. 檢視鎖表的SID

SELECT USERNAME,SID, LOCKWAIT, STATUS, MACHINE, PROGRAM
FROM v$session
WHERE sid IN (SELECT session_id FROM v$locked_object);

2.檢視鎖表的 SID、oracle 使用者、機器等

SELECT sess.SID, sess.SERIAL#, lo.ORACLE_USERNAME, lo.OS_USER_NAME, lo.LOCKED_MODE, ao.OBJECT_NAME
FROM V$LOCKED_OBJECT lo, v$session sess, dba_objects ao
WHERE lo.SESSION_ID = sess.SID AND ao.OBJECT_ID = lo.OBJECT_ID;

USERNAME:死鎖語句所用的資料庫使用者;

SID: session_id;

LOCKWAIT:死鎖的狀態,如果有內容表示被死鎖;

STATUS:狀態,active表示被死鎖;

MACHINE:死鎖語句所在的機器;

PROGRAM:產生死鎖的語句主要來自哪個應用程式。

級別描述
0 none
1 null 空
2 Row-S 行共享(RS):共享表鎖
3 Row-X 行專用(RX):用於行的修改
4 Share 共享鎖(S):阻止其他DML操作
5 S/Row-X 共享行專用(SRX):阻止其他事務操作
6 exclusive 專用(X):獨立訪問使用

3. 用sid查詢單個鎖表執行語句

SELECT sql_text
FROM v$sql
WHERE hash_value IN
      (SELECT sql_hash_value FROM v$session WHERE sid='XXXXXXXX');

4. 查詢所有加鎖的sql

SELECT sql_text
FROM v$sql
WHERE hash_value IN
      (SELECT sql_hash_value FROM v$session WHERE sid IN (SELECT session_id FROM v$locked_object));

三、解鎖語句

ALTER SYSTEM KILL SESSION 'sess.sid, sess.serial#';

相關文章