oracle数据库查看锁表的sql语句整理
一、关键表
V$LOCKED_OBJECT :记录锁信息的表
v$session :记录会话信息的表
v$sql:记录执行sql的表
dba_objects:用来管理对象(表、库等等对象)
二、相关查询
1. 查看锁表的SID
-- 简单的查看一些锁表信息 select object_id, session_id, oracle_user_name,locked_mode from v$locked_object;
2.查看锁表的 SID、oracle 用户、机器等
SELECT s.SID, s.serial#,username,osuer,machine,progress USERNAME
FROM v$session s
WHERE sid IN (SELECT session_id FROM v$locked_object);
-- 或者
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#';